Java: Как скомпилировать исполняемый файл JAR из пакетов? - PullRequest
1 голос
/ 27 марта 2010

У моего Java-приложения есть структура пакета, подобная этой:

src/com/name/app 
src/com/name/app/do 
src/com/name/utils/db

Как бы я скомпилировал файлы Java в этих каталогах в работающую флягу? Мне нужно упаковать необходимые библиотеки в сгенерированный JAR (jdbc).

Я всегда делал такие вещи в Eclipse, но теперь мне нужно предоставить пару человек способу компилировать репозиторий без использования eclipse, и я думал о создании make-файла или сценария, который вызывает необходимый javac шаблон.

Ответы [ 4 ]

5 голосов
/ 27 марта 2010

Посмотрите на Муравья. Это относительно простой для понимания инструмент сборки, который предоставляет все, что соответствует вашим требованиям. Вот быстрый скелет build.xml, с которого можно начать:

<project name="my_app_name" default="jar">

  <target name="compile">
     <javac srcdir="src" destdir="bin">
        <classpath>
           <fileset dir="lib">
              <include name="**/*.jar" />
           </fileset>
        </classpath>
     </javac>
  </target>

  <target name="jar">
     <jar manifest="manifest_file" destfile="dist/my_app_name.jar">
        <fileset dir="bin" />
        <fileset dir="lib" />
     </jar>
  </target>

Вам необходимо создать файл манифеста, который сообщит java-процессу, какой класс содержит метод main. Здесь - хорошее место для начала изучения манифестов.

В качестве альтернативы, которая создает действительно загроможденные файлы сборки Ant, вы можете щелкнуть правой кнопкой мыши свой проект Eclipse и выбрать «Экспорт ...», затем выбрать «Общие> Файлы сборки Ant».

В любом случае, это должно помочь вам начать. Вы можете задавать более конкретные вопросы, сталкиваясь с ними.

4 голосов
/ 27 марта 2010

Прежде всего, рассмотрите возможность использования Ant для такой задачи.

Но так как вы запросили ручной процесс, вам необходимо сначала создать файл манифеста , например:

Manifest-Version: 1.0
Created-By: 1.6.0 (Sun Microsystems Inc.)
Class-Path: lib/jdbc.jar lib/otherlib.jar
Main-Class: com.name.app.MainClass

Замените содержимое Class-Path вашими библиотеками, а Main-Class - полным именем вашего основного класса.

Затем вам нужно сгенерировать настоящий .jar, используя следующую команду:

jar cfm app.jar MANIFEST.MF src/com/name/app/*.class src/com/name/app/do/*.class

Где MANIFEST.MF - ранее упомянутый файл манифеста, а остальные - папки, в которых находятся ваши классы .java.

Наконец, чтобы запустить приложение, вы просто выполните: java -jar app.jar.

0 голосов
/ 27 марта 2010

Я рекомендую использовать Apache Ant для реализации ваших сценариев сборки.

При правильной реализации Ant прост в использовании, и сценарии сборки можно запускать на любой платформе, на которую можно установить JDK. Действительно, немного поработав, вы даже можете настроить свой проект так, чтобы пользователям даже не нужно было загружать / устанавливать Ant. (Подсказка: добавьте JAR-файлы Ant и скрипт-обертку в ваш дистрибутив проекта)

0 голосов
/ 27 марта 2010

Рассмотрите возможность использования Ant для этого. http://ant.apache.org/

...