Создать файл JAR, который может быть выполнен на любой машине - PullRequest
2 голосов
/ 27 июля 2010

У меня есть простое Java-приложение, которое печатает "Hello World!"на консоли.Упаковано в app.jar.Структура фляги:

main / Hello.class - мой основной класс с единственным методом println

META-INF / MANIFEST.MF

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

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

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

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

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

Ответы [ 2 ]

1 голос
/ 27 июля 2010

Я склонен использовать скрипт сборки 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, вы можете просто выполнить файл JAR File / Export ... / Runnable, и он все сделает за вас (включая создание ANT build.xml).

1 голос
/ 27 июля 2010

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

...