Включение всех jar-файлов в каталог внутри Java classpath - PullRequest
926 голосов
/ 20 октября 2008

Есть ли способ включить все файлы JAR в каталог в classpath?

Я пытаюсь java -classpath lib/*.jar:. my.package.Program, и он не может найти файлы классов, которые, безусловно, находятся в этих банках. Нужно ли добавлять каждый jar-файл в classpath отдельно?

Ответы [ 24 ]

1 голос
/ 20 октября 2008

Думайте о файле jar как о корне структуры каталогов. Да, вам нужно добавить их все отдельно.

1 голос
/ 20 октября 2008

Вам нужно добавить их все отдельно. В качестве альтернативы, если вам действительно нужно просто указать каталог, вы можете разархивировать все в один каталог и добавить его в свой путь к классам. Однако я не рекомендую этот подход, так как вы рискуете получить причудливые проблемы с версионированием и неуправляемостью пути к классам.

0 голосов
/ 17 мая 2019

Я пытаюсь запустить файл Java либо в виде jar, либо в виде классов в Ubuntu. Я потерпел неудачу в обоих вариантах. Следующим исключением является его вывод.

Download link: https://upload.cat/f694139f88c663b1

java org.statmetrics.Statmetric

или

java -cp /home/elias/statmetrics/statmetrics.jar :. org.statmetrics.Statmetrics

или

Java -classpath "/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/*" -jar /home/elias/statmeics/statmetrics.jar org.statmetrics.Statmetrics

Exception in thread "Thread-0" java.lang.NoClassDefFoundError: javax/xml/bind/annotation/adapters/XmlAdapter
    at java.base/java.lang.ClassLoader.defineClass1(Native Method)
    at java.base/java.lang.ClassLoader.defineClass(ClassLoader.java:1016)
    at java.base/java.security.SecureClassLoader.defineClass(SecureClassLoader.java:174)
    at java.base/jdk.internal.loader.BuiltinClassLoader.defineClass(BuiltinClassLoader.java:802)
    at java.base/jdk.internal.loader.BuiltinClassLoader.findClassOnClassPathOrNull(BuiltinClassLoader.java:700)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClassOrNull(BuiltinClassLoader.java:623)
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:581)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    at org.statmetrics.c.a(Unknown Source)
    at org.statmetrics.dw.a(Unknown Source)
    at org.statmetrics.dx.run(Unknown Source)
Caused by: java.lang.ClassNotFoundException: javax.xml.bind.annotation.adapters.XmlAdapter
    at java.base/jdk.internal.loader.BuiltinClassLoader.loadClass(BuiltinClassLoader.java:583)
    at java.base/jdk.internal.loader.ClassLoaders$AppClassLoader.loadClass(ClassLoaders.java:178)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:521)
    ... 12 more

Я нашел ответ:

Моя глупость.

Первый шаг: Вы должны установить соответствующую Java: у меня была Java 11, но я установил в качестве Java lib путь 8-й версии! - Вы можете установить версию Java здесь:

  sudo update-alternatives --config java

2-й шаг: Затем выполните следующую команду, изменив путь и имена файлов на ваш соответствующий путь и файлы:

  java -classpath "/usr/lib/jvm/java-1.8.0-openjdk-amd64/jre/lib/*" -jar /home/elias/statmetrics/statmetrics.jar org.statmetrics.Statmetrics

Он был успешно запущен!

0 голосов
/ 14 марта 2019

У меня есть несколько банок в папке. Следующая команда работала для меня в JDK1.8, чтобы включить все фляги, присутствующие в папке. Обратите внимание, что включить в кавычки, если у вас есть пробел в classpath

Windows

Составление: javac -classpath "C:\My Jars\sdk\lib\*" c:\programs\MyProgram.java

Бег: java -classpath "C:\My Jars\sdk\lib\*;c:\programs" MyProgram

Linux

Компиляция: javac -classpath "/home/guestuser/My Jars/sdk/lib/*" MyProgram.java

Бег: java -classpath "/home/guestuser/My Jars/sdk/lib/*:/home/guestuser/programs" MyProgram

...