Как запустить класс из jar с помощью командной строки from с указанным classpath - PullRequest
2 голосов
/ 05 мая 2011

Я пытаюсь запустить класс из JAR.Этот класс НЕ является единственным основным классом в этой банке.Кроме того, для этого требуется ряд других jar-файлов, которые я хранил в том же каталоге, что и этот jar-файл.Команды, которые я попробовал, следующие:

(mydir - это каталог, в котором расположены все мои банки с использованием платформы Windows) *

mysql-connector-java-5.1.13-bin.jar необходимо для запуска myProjImport.jarи com.mycomp.myProj.importer.csv.TestImporter - это класс, которым я пытаюсь управлять."C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" и "C:\temp\apollo_claims_test.txt" - это аргументы командной строки, требуемые классом TestImporter Вот что я попробовал:

mydir>java -cp C:\temp\test_myProj\mysql-connector-java-5.1.13-bin.jar;. myProjImport.jar com.mycomp.myProj.importer.csv.TestImporter "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" "C:\temp\apollo_claims_test.txt"

И вот ошибка:

Exception in thread "main" java.lang.NoClassDefFoundError: myProjImport/jar
Caused by: java.lang.ClassNotFoundException: myProjImport.jar
        at java.net.URLClassLoader$1.run(URLClassLoader.java:202)
        at java.security.AccessController.doPrivileged(Native Method)
        at java.net.URLClassLoader.findClass(URLClassLoader.java:190)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
        at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
        at java.lang.ClassLoader.loadClass(ClassLoader.java:248)
Could not find the main class: myProjImport.jar.  Program will exit.

Может кто-нибудь сказать мне, какую именно команду я должен выполнить?

Ответы [ 2 ]

8 голосов
/ 05 мая 2011

попробуй:

java -cp C:\temp\test_myProj\mysql-connector-java-5.1.13-bin.jar;myProjImport.jar com.mycomp.myProj.importer.csv.TestImporter "C:\Documents and Settings\user\workspace\myProjImport\src\conf\datasource.properties" "C:\temp\apollo_claims_test.txt "

при условии, что вы запускаете это из той же директории, что и myProjImport.jar

2 голосов
/ 05 мая 2011

Когда указана опция -jar, любые другие опции пути к классу игнорируются.Так что это не сработает:

java -jar MyJar.jar -classpath foo.jar

Но если вы поместите имя foo.jar в META-INF / manifest.mf внутри MyJar.jar:

Class-Path: foo.jar

Тогда foo.Поиск jar будет осуществляться на том же уровне, что и MyJar.jar, то есть в том же каталоге.

Иногда я просто распаковываю все зависимые файлы JAR и упаковываю их содержимое в MyJar.jar.Меньше зависимостей таким образом.

...