2010-07-27 4 views
2

У меня есть простое приложение java, которое печатает `hello world! ' на консоли. Он упакован в app.jar. Структура Jar:Создайте файл jar, который может быть выполнен на любом компьютере

главная/Hello.class - мой основной класс с методом опаляться Println

META-INF/MANIFEST.MF

Manifest файл содержит следующее:

Manifest-Version: 1.0 
Main-Class: main.Hello 

Все идет хорошо.

Но когда у вас есть зависимость, чем начинаются неприятности. Я не уверен, но думаю, что в этом случае вы должны поместить все библиотеки в jar-файл. Если я поместил их в META-INF/lib, я должен указать «Class-Path» в манифесте. Как будет выглядеть «Class-Path»?

P.S Есть несколько похожих вопросов, но я не нашел подходящего ответа.

ответ

1

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

build.xml файл выглядит примерно так:

<project default="create_run_jar" name="Create Runnable Jar for MyProject"> 
    <!--ANT 1.7 is required --> 
    <target name="create_run_jar"> 
     <jar destfile="my-runnable-jar.jar"> 
      <manifest> 
       <attribute name="Main-Class" value="my.MainClass"/> 
       <attribute name="Class-Path" value="."/> 
      </manifest> 
      <fileset dir="E:/path/to/my/project/bin"/> 
      <fileset dir="E:/path/to/my/project/classes"/> 
      <zipfileset src="E:/path/to/library/some-library.jar"/> 
     </jar> 
    </target> 
</project> 

Обратите внимание, что если вы используете Eclipse, вы можете сделать simplly Файл/Экспорт .../Runnable JAR-файла, и он будет делать все для вас (в том числе производящего ANT build.xml).

1

Вам не нужно указывать что-либо особенное, если вы распаковываете библиотеки и интегрируете их в свой проект. Если вы это сделаете, у вас должна быть «основная» папка, и если у вас есть org.apache.foo как внешняя библиотека, у вас также будет папка «org» на верхнем уровне.

+0

Это очень грубо, но уверен, что он работает. Я хочу включить библиотечные банки в получающуюся банку в папку META-INF/lib, поэтому вопрос все еще открыт. – Jeriho

+0

не звучит как хорошая практика для меня. Я думаю, что OP прав, что лучше положить банки в свою банку и добавить их в путь к классам. –

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