Подтвердить что ты не робот

Есть ли хороший способ использовать maven для запуска исполняемого банку?

У меня есть мультимодульный проект maven, и один из модулей предназначен для распространения.

Project \
| moduleA \
| moduleB \
| ...
| dist-module \

Распространение содержит исполняемый банку, который я хотел бы легко выполнить. Однако, чтобы выполнить его, я должен ввести что-то вроде:

java -jar dist-module/target/dist-module-1.0-SNAPSHOT-full-dist/myJar.jar

Было бы очень желательно просто напечатать:

mvn exec:java \ OR
mvn exec:exec

К сожалению, я не могу найти способ получить java-цель для выполнения .jar. Цель exec на самом деле это сделает, но есть улов: в банке есть встроенный сервер причалов, и из-за того, как работает exec (не использует тот же JVM как maven), сервер не завершается, если я не убью процесс вручную, что тоже надоедает.

Любые рекомендации о том, как это сделать, используя maven?

Edit:
Для пояснения эта команда будет в первую очередь использоваться для простого ручного тестирования дыма; чтобы прочитать выход журнала и обеспечить правильную работу программы в своей среде распространения. Таким образом, вероятно, это должен быть блокирующий вызов ctrl-c, завершающий как сервер, так и maven.

Встроенный сервер специализирован для запуска нескольких конкретных приложений и не перезагружает их автоматически. Таким образом, нет большой необходимости поддерживать работу сервера независимо от maven в течение длительных периодов времени.

4b9b3361

Ответ 1

mvn exec: java запускает приложение непосредственно из выхода компилятора ниже цели /- нет необходимости запускать из банки:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <id>default-cli</id>
                <goals>
                    <goal>java</goal>
                </goals>
                <configuration>
                    <mainClass>uk.co.pookey.hibernate.App</mainClass>
                    <systemProperties>
                        <systemProperty>
                            <key>derby.stream.error.file</key>
                            <value>${basedir}/target/derby.log</value>
                        </systemProperty>
                    </systemProperties>
                </configuration>
            </execution>
        </executions>
    </plugin>            

Если вы хотите запустить банку с помощью mvn exec: exec:

    <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
        <version>1.2.1</version>
        <executions>
            <execution>
                <id>default-cli</id>
                <goals>
                    <goal>exec</goal>
                </goals>
                <configuration>
                    <executable>java</executable>
                    <!-- optional -->
                    <workingDirectory>/tmp</workingDirectory>
                    <arguments>
                        <argument>-jar</argument>
                        <argument>${basedir}/target/hibernate-derby-memory-${project.version}.jar</argument>
                    </arguments>
                </configuration>                        
            </execution>
        </executions>
    </plugin>         

Если у вас возникли проблемы с остановкой причала, я бы рекомендовал запустить интеграционный тест (или просто не выходить из основного потока причала, не останавливая причал сначала, или просто использовать порт остановки причала)! В фоновом режиме можно запустить JVM и позволить maven снова остановить его после тестирования. Для этого есть три этапа: предварительная интеграция-тест, интеграция-тест или пост-интеграция-тест. Подробнее об этом можно узнать на http://docs.codehaus.org/display/MAVENUSER/Maven+and+Integration+Testing. При использовании plug-in-maven-плагина, config pom.xml может понравиться:

   <plugin>
        <groupId>org.mortbay.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <!-- test start/stop: -->
        <executions>                
            <execution>
                <id>start-jetty</id>
                <phase>pre-integration-test</phase>
                <goals>
                    <goal>deploy-war</goal>
                </goals>
                <configuration>
                    <daemon>true</daemon>
                    <systemProperties>
                        <systemProperty>
                            <name>some.prop</name>
                            <value>false</value>
                        </systemProperty>
                    </systemProperties>
                </configuration>
            </execution>
            <execution>
                <id>stop-jetty</id>
                <phase>post-integration-test</phase>
                <goals>
                    <goal>stop</goal>
                </goals>
            </execution>
        </executions>    
    </plugin>

Вместо того, чтобы связывать плагин причала maven с этими фазами, вы можете привязать плагин maven antrun для выполнения произвольных команд.

Ответ 2

Я бы использовал maven ant или gmaven (тогда используйте конструктор groovy ant), если вы хотите выполнить файл

После ваших изменений звучит так, будто вы используете что-то вроде DropWizard. Возможно, вам захочется увидеть, как они решение этой проблемы.

Изменить на основе комментариев:

Spring Boot Maven создаст исполняемые войны, а также выполнит их, и вам не понадобится Spring Boot и Spring. Подробнее в моем ответе здесь: Может ли spring -boot-maven-plugin использоваться для проекта Spring?