Я пытаюсь сделать приложение JavaFX, которое может принимать параметры командной строки. Я могу получить параметры. Но у меня возникают проблемы, когда я внедряю класс «А» (из Main.java), в котором есть члены Selenium (Testing/WebBrowser Automation Library).NoClassDefFoundError в JavaFx с параметрами командной строки с кодом Selenium?
// Main.java
package myPackage;
import java.util.Map;
import javafx.application.Application;
import javafx.stage.Stage;
public class Main extends Application {
@Override
public void start(Stage stage) {
if (getParameters().getRaw().isEmpty() == false) {
System.out.println("The application was called by Command Line.");
Map<String, String> params = getParameters().getNamed();
System.out.println(params.get("a"));
A myA = new A();
} else {
System.out.println("The application was called executing the jar file.");
A myA = new A();
}
}
public static void main(String[] args) {
launch(args);
}
}
// A.java
package myPackage;
import org.openqa.selenium.By;
import org.openqa.selenium.NoSuchElementException;
import org.openqa.selenium.chrome.ChromeDriver;
public class A {
ChromeDriver driver;
A() {
System.out.println("New A Instance.");
System.setProperty("webdriver.chrome.driver", "C:\\chromedriver_win32\\chromedriver.exe");
this.driver = new ChromeDriver();
}
public boolean isElementPresent(By by) {
try {
this.driver.findElement(by);
return true;
} catch (NoSuchElementException ex) {
return false;
}
}
}
Но когда я пытаюсь выполнить его:java -cp MyProject.jar myPackage.Main --a="value1"
The application was called by Command Line.
value1
Exception in Application start method
java.lang.reflect.InvocationTargetException
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at com.sun.javafx.application.LauncherImpl.launchApplicationWithArgs(LauncherImpl.java:367)
at com.sun.javafx.application.LauncherImpl.launchApplication(LauncherImpl.java:305)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:483)
at sun.launcher.LauncherHelper$FXHelper.main(LauncherHelper.java:767)
Caused by: java.lang.RuntimeException: Exception in Application start method
at com.sun.javafx.application.LauncherImpl.launchApplication1(LauncherImpl.java:894)
at com.sun.javafx.application.LauncherImpl.access$000(LauncherImpl.java:56)
at com.sun.javafx.application.LauncherImpl$1.run(LauncherImpl.java:158)
at java.lang.Thread.run(Thread.java:744)
Caused by: java.lang.NoClassDefFoundError: org/openqa/selenium/NoSuchElementException
at myPackage.Main.start(Main.java:16)
at com.sun.javafx.application.LauncherImpl$8.run(LauncherImpl.java:837)
at com.sun.javafx.application.PlatformImpl$7.run(PlatformImpl.java:331)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:297)
at com.sun.javafx.application.PlatformImpl$6$1.run(PlatformImpl.java:294)
at java.security.AccessController.doPrivileged(Native Method)
at com.sun.javafx.application.PlatformImpl$6.run(PlatformImpl.java:294)
at com.sun.glass.ui.InvokeLaterDispatcher$Future.run(InvokeLaterDispatcher.java:95)
at com.sun.glass.ui.win.WinApplication._runLoop(Native Method)
at com.sun.glass.ui.win.WinApplication.access$300(WinApplication.java:39)
at com.sun.glass.ui.win.WinApplication$4$1.run(WinApplication.java:112)
... 1 more
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.NoSuchElementException
at java.net.URLClassLoader$1.run(URLClassLoader.java:359)
at java.net.URLClassLoader$1.run(URLClassLoader.java:348)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:347)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 12 more
Exception running application myPackage.Main
Как вы можете видеть, приложение получить параметр и выводит его на экран (первая и вторая линия в этом выводе выше) ...
Я прочитал эту строку NoClassDefFoundError: org/openqa/selenium/NoSuchElementException
, но s добавлена библиотека elenium (2.37.0), а также зависимости libs. В Netbeans на вкладке Libraries > Compile
Если я запустил приложение с помощью Netbeans Project properties > run > parameters
и вставив один параметр, все в порядке. Проблема возникает, когда я делаю то же самое с помощью командной строки ...
Я пробовал много вещей ... и я не понимаю, почему?
Возможно, вам необходимо добавить библиотеку к пути к классам при выполнении приложения. То, что вы делаете в Netbeans, вступает в силу при запуске из Netbeans. –