Как я могу упаковать и запустить приложение командной строки с зависимостями, используя maven?
Я совершенно новый и для 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
для запуска приложения требует, чтобы я добавлял абсолютный путь к зависимости к моему пути к классам (либо путем установки переменной среды, либо с помощью переключателя командной строки):
java -cp target/my-app-1.0-SNAPSHOT.jar:/.../.m2/.../new-dependency.jar com.mycompany.app.App
Это, очевидно, будет быстро громоздким:)
Я подозреваю, что это не обычный способ запуска java-программы, и мне просто нужно больше узнать о файлах .jar, но пока я это делаю, я был бы признателен за любые советы о том, как это сделать должным образом.
Я не использую IDE, кстати. vim из командной строки.
Спасибо!
Майк.
Ответы
Ответ 1
Вы можете сделать исполняемый файл 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>
Теперь вы можете запустить свою банку с помощью команды: java -jar myjar.jar
или двойным щелчком по ней (недоступно на всех платформах).
Ответ 2
Вы можете использовать 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/ для получения дополнительной информации о способах запуска (включая передачу аргументов командной строки тому, что вы хотите запустить )
Ответ 3
Если вы хотите, чтобы это было просто для вас и других, вы можете создать банку со всеми зависимостями в ней, используя плагин maven-assembly-plugin. Пример здесь: http://maven.apache.org/plugins/maven-assembly-plugin/usage.html, раздел Выполнение: построение сборки
Ответ 4
Вы можете использовать maven-shade-plugin, который создаст исполняемую uber-войну со всеми зависимостями.
ИЛИ
Используйте appassembler-plugin, который создает script, который импортирует все зависимости и позволяет выполнять основной класс из командной строки.