Виконати клас у файлі 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 (у наведеному вище прикладі) має залежність від інших банок, запустіть її так: java -cp залежное файл1.jar; залежний файл2.jar; c: \ location_of_jar \ myjar.jar com. mypackage.myClass
akjain

2
Можливий шлях відмови, на який слід не звертати увагу, якщо це не працює: будьте впевнені, що ваш повністю кваліфікований шлях до вашого класу відповідає саме тому, що є у вашому файлі jar. Якщо ви робите unzip -l /location-of-jar/myjar.jar і бачите щось інше, ніж com / mypackage / myClass, це ваша проблема. (Наприклад, якщо ви бачите bin / com / mypackage / myClass, вам слід було б cd'ed в bin, щоб створити ваш jar файл; те, що у вас не буде працювати.)
Scott C Wilson

використовуйте MyClass, а не myClass
Breno Inojosa

Спробувавши вище, я отримую помилку Виняток у потоці "main" java.lang.NoClassDefFoundError: огірок / api / cli / Main на com.company.project.demo.bdd.runner.Execute.main (Execute.java:20 ) Викликано: java.lang.ClassNotFoundException: cucumber.api.cli.Main at java.net.URLClassLoader.findClass (Невідоме джерело) на java.lang.ClassLoader.loadClass (Невідоме джерело) у sun.misc.Launcher $ AppClass. loadClass (Невідоме джерело) у java.lang.ClassLoader.loadClass (Невідомо джерело) ... Ще 1
Vaibhav_Sharma


18

У Java доступні два типи файлів JAR:

  1. Виконуваний / виконуваний файл jar, який містить файл маніфесту. Для запуску баночки Runnable ви можете використовувати 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
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.