Запустить класс в файле Jar

176

Если у вас есть файл jar, myJar.jarрасположенный в / myfolder, и вы хотите использовать класс, вызванный myClassиз него, как вы будете делать это из командной строки?

Я думал, что это будет пойти в каталог и сказать, java -cp myJar.jar.myClassно это не работает. Любая помощь будет оценена.

Джим
источник
java -cp myJar.jar myClassу меня работает нормально - у вас есть случайный период в командной строке вместо пробела?
Крис Додд
1
Что вы имеете в виду, когда говорите, что хотите «использовать» этот класс? Есть ли основной метод, который вы хотите вызвать, в частности?
Марселлус Уоллес

Ответы:

256

Использование java -cp myjar.jar com.mypackage.myClass.

  1. Если класса нет в пакете, то просто java -cp myjar.jar myClass.

  2. Если вы не находитесь в каталоге, где myJar.jarнаходится, то вы можете сделать:

    1. На платформах Unix или Linux:

      java -cp /location_of_jar/myjar.jar com.mypackage.myClass

    2. В Windows:

      java -cp c:\location_of_jar\myjar.jar com.mypackage.myClass

Битовая карта
источник
10
Просто добавьте к нему - в случае, если com.mypackage.myClass (в приведенном выше примере) имеет зависимости от других jar-файлов, запустите его следующим образом: java -cp independentfile1.jar; depenfile2.jar; c: \ location_of_jar \ myjar.jar com. mypackage.myClass
akjain
2
Возможный путь сбоя, на который нужно обратить внимание в случае, если это не сработает: убедитесь, что ваш полный путь к вашему классу точно соответствует тому, что находится в вашем jar-файле. Если вы разархивируете -l /location-of-jar/myjar.jar и увидите что-то отличное от com / mypackage / myClass, это ваша проблема. (Например, если вы видите bin / com / mypackage / myClass, вы должны были сделать cd'ed в bin для создания файла JAR; то, что у вас не получится.)
Скотт В. Уилсон,
использовать MyClass, а не myClass
Брено Инохоса
Пытаясь выше, я получаю Исключение ошибки в потоке "основной" java.lang.NoClassDefFoundError: cucumber / api / cli / Main на com.company.project.demo.bdd.runner.Execute.main (Execute.java:20 ) Причина: java.lang.ClassNotFoundException: cucumber.api.cli.Main на java.net.URLClassLoader.findClass (неизвестный источник) на java.lang.ClassLoader.loadClass (неизвестный источник) на sun.misc.Launcher $ AppClassLoader. loadClass (неизвестный источник) в java.lang.ClassLoader.loadClass (неизвестный источник) ... еще 1
Vaibhav_Sharma
24

Вы хотите:

java -cp myJar.jar myClass

Документация дает следующий пример:

C:> java -classpath C:\java\MyClasses\myclasses.jar utility.myapp.Cool
Ричард Кэмпбелл
источник
18

В Java есть два типа файлов JAR:

  1. Выполняемый / исполняемый файл JAR, который содержит файл манифеста. Для запуска Runnable Jar вы можете использовать java -jar fileName.jarилиjava -jar -classpath abc.jar fileName.jar

  2. Простой файл JAR, который не содержит файл манифеста, поэтому вы просто запускаете свой основной класс, указывая его путь java -cp ./fileName.jar MainClass

Гаурав Сингх
источник
6

Предполагая, что вы находитесь в каталоге, где myJar.jarнаходится файл, и в котором myClassесть public static void main()метод:

Вы используете следующую командную строку:

java -cp ./myJar.jar myClass

Куда:

  1. myJar.jarнаходится в текущем пути , обратите внимание, что .в большинстве систем его нет в текущем пути. Полный путь предпочтителен здесь.

  2. myClassэто полный путь к классу пакета , в примере предполагается, что он myClassнаходится в пакете по умолчанию, что является плохой практикой, если он находится во вложенном пакете com.mycompany.mycode.myClass.


источник
1

Это правильный путь , чтобы выполнить .jar, и независимо от того один класс , который .jarдолжен иметь main()и являются следующие параметры к нему:

java -DLB="uk" -DType="CLIENT_IND" -jar com.fbi.rrm.rrm-batchy-1.5.jar
ubersucks
источник