Как мне упаковать и запустить простое приложение командной строки с зависимостями, используя maven? - PullRequest
15 голосов
/ 17 мая 2011

Я новичок как в Java, так и в Maven, так что это, вероятно, очень просто.

Если я буду следовать инструкциям maven2 hello world здесь:

http://maven.apache.org/guides/getting-started/maven-in-five-minutes.html

все работает нормально.Если затем я изменю pom.xml, чтобы ввести зависимость из удаленного репозитория, файлы для этой зависимости будут сохранены в ~/.m2/repository/new-dependency/.

Использование синтаксиса в инструкциях hello world для запуска приложения требует, чтобыЯ добавляю абсолютный путь к зависимости к моему classpath (либо путем установки переменной среды, либо с помощью переключателя командной строки):

java -cp target/my-app-1.0-SNAPSHOT.jar:/.../.m2/.../new-dependency.jar com.mycompany.app.App

Это, очевидно, быстро станет громоздким:)

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

Я не использую IDE, кстати.vim из командной строки.

Спасибо!

Майк.

Ответы [ 4 ]

17 голосов
/ 17 мая 2011

Вы можете использовать сам maven для его запуска, я полагаю, он устанавливает путь к классам для вас.

mvn compile

скомпилирует его, а затем вы запустите:

mvn exec:java -Dexec.mainClass="com.mycompany.app.App"  

, который выполнит его.

Вы можете посмотреть http://www.vineetmanohar.com/2009/11/3-ways-to-run-java-main-from-maven/ для получения дополнительной информации о способах запуска (включая передачу аргументов командной строки тому, что хотите запустить)

13 голосов
/ 17 мая 2011

Вы можете сделать исполняемый файл jar, добавив атрибут Main-Class в его файл манифеста.В Maven это делает плагин архиватора.Чтобы добавить атрибут Main-Class, добавьте его в ваш pom.xml:

 <build>
   <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-jar-plugin</artifactId>        
      <configuration>
        <archive>
          <manifest>
            <addClasspath>true</addClasspath>
            <mainClass>com.mycompany.app.App</mainClass>
          </manifest>
        </archive>
      </configuration>
    </plugin>
  </plugins>
 </build>

Теперь вы можете запустить jar с помощью команды: java -jar myjar.jar или двойным щелчком по нему (доступно не на всех платформах).

3 голосов
/ 17 мая 2011

Вы можете использовать maven-shade-plugin , который создаст исполняемый uber war со всеми зависимостями.

ИЛИ

Используйте appassembler-plugin , который создает скрипт, который импортирует все зависимости и позволяет выполнять основной класс из командной строки.

3 голосов
/ 17 мая 2011

Если вы хотите, чтобы это было просто для вас и других, тогда вы можете создать jar со всеми зависимостями в нем, используя maven-assembly-plugin.Пример здесь: http://maven.apache.org/plugins/maven-assembly-plugin/usage.html, раздел Выполнение: Сборка сборки

...