2015-01-01 3 views
0

Простая проблема: я хотел бы назначить новый номер версии \ build каждый раз, когда я выдаю новый файл jar своим клиентам.Назначение версии файлу jar

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

В моем проекте jar есть два пакета под общим пакетом «com»: «main» и «loginRequest».

Мой основной класс («Основной») находится под «основным» пакетом.

Мой манифест файл:

Manifest-Version: 1.0 
Main-Class: main.Main 
Specification-Version: 1.1 

Я пытался построить банку, используя затмение (за исключением СРК файлов), включая манифест.

Я также попытался следующие:

jar -cvfm v11_4_WebExClientEE.jar ..\..\v11_4_WebExClientEE.mf main\Main.class 

который retruned мне

"added manifest 

adding: main/Main.class(in = 1206) (out= 677)(deflated 43%)" 

, а затем:

java -jar v11_4_WebExClientEE.jar 

, который вернул меня

Exception in thread "main" java.lang.NoClassDefFoundError: main/Main (wrong name: com/main/Main) 

т.д.

В моем главном классе CTOR я добавил:

Package p = this.getClass().getPackage(); 

    System.out.println("v11_4_WebExClientEE spec Version : " + p.getSpecificationVersion()); 

Можете ли вы посоветовать?

Спасибо!

+0

Каков пакет, в котором существует ваш основной класс? Вы уверены, что вам нужна версия манифеста, а не что-то вроде v11_4_WebExClientEE- .jar? – SMA

+0

Основной класс, который называется Main, находится под пакетом «main». Вы предлагаете мне добавить номер версии в имя jar? – dushkin

+0

Да. Таким образом, вы можете поддерживать различную версию в централизованном репозитории и позволить своему клиенту забирать из этого репозитория через maven/ivy. – SMA

ответ

0

Сначала мы создаем текстовый файл с именем Manifest.txt со следующим содержанием:

Name: com/main/ 
Specification-Title: Main Common Class 
Specification-Version: 1.2 
Specification-Vendor: Example Tech, Inc. 
Implementation-Title: com.main 
Implementation-Version: build57 
Implementation-Vendor: Example Tech, Inc. 

Затем мы создаем JAR файл с именем MyJar_1.2.jar, введя следующую команду:

jar cfm MyJar_1.2.jar Manifest.txt MyPackage/*.class 
+0

Прошу прощения, я не совсем понял ваши советы. Можете ли вы привести мне пример, пожалуйста? Спасибо – dushkin

+0

Да, я увидел этот пример в Интернете и попробовал. Я думаю, что моя проблема заключалась в том, что я не знал точно, какую ценность поставить вместо MyPackage. После подробностей, которые я дал, должен ли он быть com/main/*. Class? и что я должен поставить вместо java/util/и java.util? Это имеет значение? – dushkin

+0

Вы можете удалить реализацию-Title:, если вы хотите использовать ее при реализации другого пакета и yes com/main/*. Class должен работать – dev

1

ключ к тому, что вы сделали неправильно в сообщении исключения:

... NoClassDefFoundError: main/Main (wrong name: com/main/Main)

JVM нашел запись для вашего класса точки входа (в соответствии с вашим атрибутом «Основной класс»), но загрузчик классов исключил, что имя пути JAR не совпадает с полным именем пакета для вашего класса , (Загрузчик классов ожидал "главный/Main", но фактическое имя пакета был "/ ком/главная/Main" ... в соответствии с содержимым файла класса.)

Following the details I gave, should it be com/main/*.class ?

Да. Это то, что вы должны поместить в командную строку jar, чтобы добавить классы с правильными путями JAR. (Или, по крайней мере, что-то в этом роде. Главное, что аргумент (ы) должен соответствовать полному пути ввода, который вам нужен для JAR-файла, т. Е. Полностью присвоенному классу (именам).)

and what should I put instead of java/util/ and java.util ?

Атрибут имени, вероятно, вообще не должен быть. Атрибут «Имя» вводит секцию манифеста для записи в файле JAR.

Атрибут «Реализация-Заголовок» является чисто описательным. Вы можете положить туда, где хотите.

Прежде чем идти дальше, я настоятельно рекомендую , что вы читали JAR file specificationтщательно. Обратите внимание на то, что спецификация говорит о синтаксисе манифеста и что означают атрибуты манифеста.

+0

Спасибо Стивен. Я обновил команду jar, так как вы предложили ang получить следующее: com \ main \ *. Class: no такой файл или каталог добавил манифест. основной имеет обратную косую черту после него Althogh вы не могли бы видеть его комментарий ... Структура каталога с (!): \ Users \ \ Documents \ затмение \ \ Bin \ ком \ главная \ – dushkin

Смежные вопросы