我怎么知道 java 程序需要运行哪些 jar 文件



最近我

试图运行 2048 机器人upd:作者删除了该项目,但创建了新项目)。但它就是没有用。开发人员说它从Intelij IDEA运行就好了。是的,它似乎确实如此。所以我做了什么:
>"c:Program FilesJavajdk1.7.0_51binjavac.exe" Program.java -cp selenium-java-2.41.0.jar
Note: Program.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
>java Program -cp selenium-java-2.41.0.jar
Error: Could not find or load main class Program

Intelij IDEA这样运行它:

"C:Program FilesJavajdk1.7.0_51binjava" -Didea.launcher.port=7532 "-Didea.launcher.bin.path=C:Program Files (x86)JetBrainsIntelliJ IDEA Community Edition 13.1.1bin" -Dfile.encoding=UTF-8 -classpath "C:Program FilesJavajdk1.7.0_51jrelibcharsets.jar;C:Program FilesJavajdk1.7.0_51jrelibdeploy.jar;C:Program FilesJavajdk1.7.0_51jrelibjavaws.jar;C:Program FilesJavajdk1.7.0_51jrelibjce.jar;C:Program FilesJavajdk1.7.0_51jrelibjfr.jar;C:Program FilesJavajdk1.7.0_51jrelibjfxrt.jar;C:Program FilesJavajdk1.7.0_51jrelibjsse.jar;C:Program FilesJavajdk1.7.0_51jrelibmanagement-agent.jar;C:Program FilesJavajdk1.7.0_51jrelibplugin.jar;C:Program FilesJavajdk1.7.0_51jrelibresources.jar;C:Program FilesJavajdk1.7.0_51jrelibrt.jar;C:Program FilesJavajdk1.7.0_51jrelibextaccess-bridge-64.jar;C:Program FilesJavajdk1.7.0_51jrelibextdnsns.jar;C:Program FilesJavajdk1.7.0_51jrelibextjaccess.jar;C:Program FilesJavajdk1.7.0_51jrelibextlocaledata.jar;C:Program FilesJavajdk1.7.0_51jrelibextsunec.jar;C:Program FilesJavajdk1.7.0_51jrelibextsunjce_provider.jar;C:Program FilesJavajdk1.7.0_51jrelibextsunmscapi.jar;C:Program FilesJavajdk1.7.0_51jrelibextzipfs.jar;C:UsersYuriDesktop2048_bot2048_Bot_2.0-mastertargetclasses;C:UsersYuri.m2repositoryorgseleniumhqseleniumselenium-firefox-driver2.39.0selenium-firefox-driver-2.39.0.jar;C:UsersYuri.m2repositoryorgseleniumhqseleniumselenium-remote-driver2.39.0selenium-remote-driver-2.39.0.jar;C:UsersYuri.m2repositorycglibcglib-nodep2.1_3cglib-nodep-2.1_3.jar;C:UsersYuri.m2repositoryorgjsonjson20080701json-20080701.jar;C:UsersYuri.m2repositoryorgseleniumhqseleniumselenium-api2.39.0selenium-api-2.39.0.jar;C:UsersYuri.m2repositorycomgoogleguavaguava15.0guava-15.0.jar;C:UsersYuri.m2repositoryorgapachehttpcomponentshttpclient4.3.1httpclient-4.3.1.jar;C:UsersYuri.m2repositoryorgapachehttpcomponentshttpcore4.3httpcore-4.3.jar;C:UsersYuri.m2repositorycommons-loggingcommons-logging1.1.3commons-logging-1.1.3.jar;C:UsersYuri.m2repositorycommons-codeccommons-codec1.6commons-codec-1.6.jar;C:UsersYuri.m2repositoryorgapachecommonscommons-exec1.1commons-exec-1.1.jar;C:UsersYuri.m2repositorynetjavadevjnajna3.4.0jna-3.4.0.jar;C:UsersYuri.m2repositorynetjavadevjnaplatform3.4.0platform-3.4.0.jar;C:UsersYuri.m2repositorycommons-iocommons-io2.2commons-io-2.2.jar;C:Program Files (x86)JetBrainsIntelliJ IDEA Community Edition 13.1.1libidea_rt.jar" com.intellij.rt.execution.application.AppMain Program

为方便起见,以下是jar文件:

C:Program FilesJavajdk1.7.0_51jrelibcharsets.jar
C:Program FilesJavajdk1.7.0_51jrelibdeploy.jar
C:Program FilesJavajdk1.7.0_51jrelibjavaws.jar
C:Program FilesJavajdk1.7.0_51jrelibjce.jar
C:Program FilesJavajdk1.7.0_51jrelibjfr.jar
C:Program FilesJavajdk1.7.0_51jrelibjfxrt.jar
C:Program FilesJavajdk1.7.0_51jrelibjsse.jar
C:Program FilesJavajdk1.7.0_51jrelibmanagement-agent.jar
C:Program FilesJavajdk1.7.0_51jrelibplugin.jar
C:Program FilesJavajdk1.7.0_51jrelibresources.jar
C:Program FilesJavajdk1.7.0_51jrelibrt.jar
C:Program FilesJavajdk1.7.0_51jrelibextaccess-bridge-64.jar
C:Program FilesJavajdk1.7.0_51jrelibextdnsns.jar
C:Program FilesJavajdk1.7.0_51jrelibextjaccess.jar
C:Program FilesJavajdk1.7.0_51jrelibextlocaledata.jar
C:Program FilesJavajdk1.7.0_51jrelibextsunec.jar
C:Program FilesJavajdk1.7.0_51jrelibextsunjce_provider.jar
C:Program FilesJavajdk1.7.0_51jrelibextsunmscapi.jar
C:Program FilesJavajdk1.7.0_51jrelibextzipfs.jar
C:UsersYuriDesktop2048_bot2048_Bot_2.0-mastertargetclasses
C:UsersYuri.m2repositoryorgseleniumhqseleniumselenium-firefox-driver2.39.0selenium-firefox-driver-2.39.0.jar
C:UsersYuri.m2repositoryorgseleniumhqseleniumselenium-remote-driver2.39.0selenium-remote-driver-2.39.0.jar
C:UsersYuri.m2repositorycglibcglib-nodep2.1_3cglib-nodep-2.1_3.jar
C:UsersYuri.m2repositoryorgjsonjson20080701json-20080701.jar
C:UsersYuri.m2repositoryorgseleniumhqseleniumselenium-api2.39.0selenium-api-2.39.0.jar
C:UsersYuri.m2repositorycomgoogleguavaguava15.0guava-15.0.jar
C:UsersYuri.m2repositoryorgapachehttpcomponentshttpclient4.3.1httpclient-4.3.1.jar
C:UsersYuri.m2repositoryorgapachehttpcomponentshttpcore4.3httpcore-4.3.jar
C:UsersYuri.m2repositorycommons-loggingcommons-logging1.1.3commons-logging-1.1.3.jar
C:UsersYuri.m2repositorycommons-codeccommons-codec1.6commons-codec-1.6.jar
C:UsersYuri.m2repositoryorgapachecommonscommons-exec1.1commons-exec-1.1.jar
C:UsersYuri.m2repositorynetjavadevjnajna3.4.0jna-3.4.0.jar
C:UsersYuri.m2repositorynetjavadevjnaplatform3.4.0platform-3.4.0.jar
C:UsersYuri.m2repositorycommons-iocommons-io2.2commons-io-2.2.jar
C:Program Files (x86)JetBrainsIntelliJ IDEA Community Edition 13.1.1libidea_rt.jar" com.intellij.rt.execution.application.AppMain Program

所以它从jdkjar文件开始,然后是项目输出目录,然后是一些jar文件,这些文件可能是由Intelij IDEA自己下载的,最后是Intelij IDEAjar文件,调试或类似的东西可能需要该文件。

那么,我如何知道需要哪些jar文件以及这些~/.m2文件来自哪里?

UPD 以下是为启动此程序而设置的最小jar文件:

C:UsersYuri.m2repositoryorgseleniumhqseleniumselenium-firefox-driver2.39.0selenium-firefox-driver-2.39.0.jar
C:UsersYuri.m2repositoryorgseleniumhqseleniumselenium-remote-driver2.39.0selenium-remote-driver-2.39.0.jar
C:UsersYuri.m2repositoryorgjsonjson20080701json-20080701.jar
C:UsersYuri.m2repositoryorgseleniumhqseleniumselenium-api2.39.0selenium-api-2.39.0.jar
C:UsersYuri.m2repositorycomgoogleguavaguava15.0guava-15.0.jar
C:UsersYuri.m2repositoryorgapachehttpcomponentshttpclient4.3.1httpclient-4.3.1.jar
C:UsersYuri.m2repositoryorgapachehttpcomponentshttpcore4.3httpcore-4.3.jar
C:UsersYuri.m2repositorycommons-loggingcommons-logging1.1.3commons-logging-1.1.3.jar
C:UsersYuri.m2repositoryorgapachecommonscommons-exec1.1commons-exec-1.1.jar

因此,即使在m2 diretory 中,也不是所有jar文件。

UPD Selenium Client & WebDriver Language Bindings 附带了额外的jar文件,但并非所有文件都是必需的。因此,其中一个选项是指定所有这些jar文件。但我能够让它以这种方式工作:

>java Program
Exception in thread "main" java.lang.NoClassDefFoundError: org/openqa/selenium/firefox/FirefoxDriver
        at Program.main(Program.java:18)
Caused by: java.lang.ClassNotFoundException: org.openqa.selenium.firefox.FirefoxDriver
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more
>java -cp "selenium-java-2.41.0.jar;." Program
Exception in thread "main" java.lang.NoClassDefFoundError: com/google/common/base/Function
        at Program.main(Program.java:18)
Caused by: java.lang.ClassNotFoundException: com.google.common.base.Function
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 1 more
>java -cp "selenium-java-2.41.0.jar;guava-15.0.jar;." Program
Exception in thread "main" java.lang.NoClassDefFoundError: org/json/JSONException
        at org.openqa.selenium.firefox.FirefoxProfile.<init>(FirefoxProfile.java:87)
        at org.openqa.selenium.firefox.FirefoxProfile.<init>(FirefoxProfile.java:77)
        at org.openqa.selenium.firefox.FirefoxProfile.<init>(FirefoxProfile.java:65)
        at org.openqa.selenium.firefox.FirefoxDriver.getProfile(FirefoxDriver.java:262)
        at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:239)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:114)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:95)
        at Program.main(Program.java:18)
Caused by: java.lang.ClassNotFoundException: org.json.JSONException
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 11 more
>java -cp "selenium-java-2.41.0.jar;guava-15.0.jar;json-20080701.jar;." Program
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/exec/Executor
        at org.openqa.selenium.os.CommandLine.<init>(CommandLine.java:47)
        at org.openqa.selenium.firefox.FirefoxBinary.startProfile(FirefoxBinary.java:96)
        at org.openqa.selenium.firefox.FirefoxBinary.clean(FirefoxBinary.java:226)
        at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:91)
        at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:246)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:114)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:95)
        at Program.main(Program.java:18)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.exec.Executor
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 11 more
>java -cp "selenium-java-2.41.0.jar;guava-15.0.jar;json-20080701.jar;commons-exec-1.1.jar;." Program
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/params/HttpParams
        at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:93)
        at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:246)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:114)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:95)
        at Program.main(Program.java:18)
Caused by: java.lang.ClassNotFoundException: org.apache.http.params.HttpParams
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 8 more
>java -cp "selenium-java-2.41.0.jar;guava-15.0.jar;json-20080701.jar;commons-exec-1.1.jar;httpclient-4.3.1.jar;." Program
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/params/HttpParams
        at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:93)
        at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:246)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:114)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:95)
        at Program.main(Program.java:18)
Caused by: java.lang.ClassNotFoundException: org.apache.http.params.HttpParams
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 8 more
>java -cp "selenium-java-2.41.0.jar;guava-15.0.jar;json-20080701.jar;commons-exec-1.1.jar;httpcore-4.3.jar;." Program
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/http/auth/Credentials
        at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:93)
        at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:246)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:114)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:95)
        at Program.main(Program.java:18)
Caused by: java.lang.ClassNotFoundException: org.apache.http.auth.Credentials
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 8 more
>java -cp "selenium-java-2.41.0.jar;guava-15.0.jar;json-20080701.jar;commons-exec-1.1.jar;httpcore-4.3.jar;httpclient-4.3.1.jar;." Program
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/logging/LogFactory
        at org.apache.http.conn.ssl.AbstractVerifier.<init>(AbstractVerifier.java:82)
        at org.apache.http.conn.ssl.AllowAllHostnameVerifier.<init>(AllowAllHostnameVerifier.java:40)
        at org.apache.http.conn.ssl.SSLSocketFactory.<clinit>(SSLSocketFactory.java:145)
        at org.openqa.selenium.remote.internal.HttpClientFactory.getClientConnectionManager(HttpClientFactory.java:60)
        at org.openqa.selenium.remote.internal.HttpClientFactory.<init>(HttpClientFactory.java:48)
        at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:100)
        at org.openqa.selenium.remote.HttpCommandExecutor.<init>(HttpCommandExecutor.java:81)
        at org.openqa.selenium.firefox.internal.NewProfileExtensionConnection.start(NewProfileExtensionConnection.java:93)
        at org.openqa.selenium.firefox.FirefoxDriver.startClient(FirefoxDriver.java:246)
        at org.openqa.selenium.remote.RemoteWebDriver.<init>(RemoteWebDriver.java:114)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:193)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:186)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:182)
        at org.openqa.selenium.firefox.FirefoxDriver.<init>(FirefoxDriver.java:95)
        at Program.main(Program.java:18)
Caused by: java.lang.ClassNotFoundException: org.apache.commons.logging.LogFactory
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.net.URLClassLoader$1.run(Unknown Source)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        at sun.misc.Launcher$AppClassLoader.loadClass(Unknown Source)
        at java.lang.ClassLoader.loadClass(Unknown Source)
        ... 15 more
>java -cp "selenium-java-2.41.0.jar;guava-15.0.jar;json-20080701.jar;commons-exec-1.1.jar;httpcore-4.3.jar;httpclient-4.3.1.jar;commons-logging-1.1.1.jar;." Program

UPD 或者:

find -name '*.jar' -execdir cp -t ~/path/to/prj {} +

如果你编译

javac Program.java

然后将生成Program.class。这必须位于您的类路径中。

java -cp "Program.class;selenium-java-2.41.0.jar"

Java 程序不需要任何特定的 jar 文件来运行,但它需要包含的类。有各种工具和网站可以帮助您找到:

  • 如何查找 Java 类所属的 Jar

还有一些工具可以帮助您管理这些依赖项,例如Maven(.m2与之相关)。提交人指出,

您将需要以某种方式安装Selenium依赖项,例如使用Maven。

恕我直言,该项目应该带有绒球.xml或罐子。

最新更新