'Not able to Start appium service from java code

Not able to start appium from code made a function and called before desired capability, post desired capability. Getting error while running below code: C:\Users\Ritesh Mittal\AppData\Roaming\npm\node_modules\appium\lib\appium.js:1 import _ from 'lodash'; ^^^^^^

SyntaxError: Cannot use import statement outside a module at Object.compileFunction (node:vm:352:18)

//Option 1
public static void  runAppiumService(String portNumber) {
            
            //Build parameters for appium server:
            AppiumServiceBuilder appiumServiceBuilder = new AppiumServiceBuilder();
            appiumServiceBuilder.usingPort(Integer.parseInt(portNumber))
                    .withIPAddress("127.0.0.1")
                    .withAppiumJS(new File("C:\\Users\\Ritesh Mittal\\AppData\\Roaming\\npm\\node_modules\\appium\\lib\\appium.js"))
                    .withArgument(GeneralServerFlag.SESSION_OVERRIDE)
                    .withLogFile(new File(System.getProperty("user.dir") + "/target/resources/appium_server_logs" + Thread.currentThread().getId()));
            AppiumDriverLocalService service = AppiumDriverLocalService.buildService(appiumServiceBuilder);
            service.start();
    }
//Option 2
    DesiredCapabilities dc = new DesiredCapabilities();
                        dc.setCapability(MobileCapabilityType.DEVICE_NAME, deviceName);
                        //dc.setCapability(MobileCapabilityType.PLATFORM_VERSION,platformVersion);
                        dc.setCapability(MobileCapabilityType.PLATFORM_NAME, "Android");
                        dc.setCapability(MobileCapabilityType.APP, System.getProperty("user.dir")+"/src/test/resources/apps/CRMNextNative 6.29.0-release_screenshot_enabled.apk");
                        dc.setCapability("automationName","UiAutomator2");
                        dc.setCapability("appPackage", "com.crmnextmobile.crmnextofflineplay");
                        dc.setCapability("appActivity", "com.crmnextmobile.crmnextofflineplay.qr.QrScannerActivity");
                        dc.setCapability("enforceAppInsall", true);
                        URL url = new URL("http://127.0.0.1:"+portNumber+"/wd/hub");
    
                    
                    AppiumDriverLocalService service;
                       service = AppiumDriverLocalService.buildService(new AppiumServiceBuilder()
                               .usingPort(Integer.parseInt(portNumber))
                               .usingDriverExecutable(new File("C:\\Program Files\\nodejs\\node.exe"))
                               .withAppiumJS(new File("C:\\Users\\Ritesh Mittal\\AppData\\Roaming\\npm\\node_modules\\appium\\lib\\appium.js"))
                               .withArgument(GeneralServerFlag.RELAXED_SECURITY)
                               .withArgument(GeneralServerFlag.SESSION_OVERRIDE)
                               .withArgument(GeneralServerFlag.LOG_LEVEL, "error")
                               .withCapabilities(dc));
                        service.start();
                        logger.info("Appium started ......");
                        Thread.sleep(10000);
                    driver = new AppiumDriver(url,dc);              
                    driver.manage().timeouts().implicitlyWait(Duration.ofSeconds(10));
                    System.out.println("CRMNext automation start..");


Solution 1:[1]

please try this code:

public void startServer() throws IOException, InterruptedException {

    Properties prop = new Properties();
    
    InputStream input = null;

    input = getClass().getClassLoader().getResourceAsStream("config.properties");
    
    try {
        prop.load(input);
    } catch (IOException e) {

        e.printStackTrace();

    }

    Map<String, String> env = new HashMap<>(System.getenv());

    env.put("PATH", prop.getProperty("Local_Path") + env.get("PATH"));
    env.put("ANDROID_HOME", prop.getProperty("Android_Home"));

    int port = Integer.parseInt(prop.getProperty("port"));
    
    System.out.println("port--> "+port);

    service = AppiumDriverLocalService.buildService(
            new AppiumServiceBuilder().usingDriverExecutable(new File(prop.getProperty("DriverExecutable")))
                    .withAppiumJS(new File(prop.getProperty("AppiumJS"))).withIPAddress(prop.getProperty("IP"))
                    .usingPort(port).withLogFile(new File("AppiumLog.text")).withEnvironment(env));

    service.start();

    Thread.sleep(20000);

}

Solution 2:[2]

I solved it. I was doing two mistakes

  1. Appium Path was not correct. Incorrect path was builder.withAppiumJS(new File("C:\Users\Ritesh Mittal\AppData\Roaming\npm\node_modules\appium\lib\appium.js")); corrected: builder.withAppiumJS(new File("C:\Users\Ritesh Mittal\AppData\Roaming\npm\node_modules\appium"));

  2. added arguments builder.withArgument(() -> "--base-path", "/wd/");

Sources

This article follows the attribution requirements of Stack Overflow and is licensed under CC BY-SA 3.0.

Source: Stack Overflow

Solution Source
Solution 1 rakeshsahu59
Solution 2 mittalri