2016-02-16 6 views
1

У меня есть реакторный проект со следующей структуройзапустить приложение Java и веб-приложения в одном мавенно построить в рамках проекта реактора

server 
- pom.xml (parent) 
-- appserver (has a server socket) 
-- webserver (connects to the socket in appserver and gets data) 

Appserver pom.xml имеет maven-exec-plugin, который запускает основной метод в моем Java класс AppServer.

Когда я запустил проверку цели в моем самом верхнем (серверном) проекте, моя сборка застряла на appserver - цель exec и никогда не переходит к созданию/запуску моего веб-сервера.

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

Вот конфигурация плагина exec maven на моем сервере приложений.

<groupId>org.codehaus.mojo</groupId> 
<artifactId>exec-maven-plugin</artifactId> 
<executions> 
    <execution> 
    <goals> 
     <goal>java</goal> 
    </goals> 
    </execution> 
</executions> 
<configuration> 
    <mainClass>somepackage.AppServer</mainClass> 
</configuration> 

Я знаю, что многие другие вопросы подобного характера было предложено раньше, и большинство ответов вращаются вокруг использования скриптов, с antrun плагин и почти все из них зарегистрировано не менее 3/4 лет, и я надеюсь, что новый решение в более независимой от платформы форме доступно сейчас.

+0

Боюсь, я не понимаю вашу проблему. Что вы хотите сделать здесь? Не могли бы вы рассказать нам, что такое ваш проект, что он должен делать, и что он не делает? – Tunaki

+0

Когда я запускаю проверку mvn в самом верхнем проекте, мой процесс сборки застревает при запуске моего java-класса в моем AppServer, поскольку это процесс блокировки. Я хотел бы, чтобы сборка продолжалась и запускала мой веб-сервер впоследствии. – Gautam

+1

Ха, у вас будет больше удачи с целью ['exec'] (http://www.mojohaus.org/exec-maven-plugin/examples/example-exec-for-java-programs.html) (вместо этого 'java'). Он выполняется в раздвоенной виртуальной машине. Вы можете заставить его вызвать сценарий оболочки, который запускает фоновый процесс. См. Здесь: http://stackoverflow.com/q/27804862/1743880 – Tunaki

ответ

1

К сожалению, нет лучших решений, кроме использования maven-antrun-plugin для вашего прецедента. maven-exec-plugin может использоваться для запуска внешнего процесса либо в той же виртуальной машине с целью java, либо в раздвоенной виртуальной машине с целью exec, но в обоих случаях она будет блокироваться; что плагин будет ожидать завершения выполнения. Возможная работа по запуску сценария оболочки, как упомянуто here и here, хорошо работает в среде Linux. Однако в вашем случае это не сработает, потому что вам необходимо поддерживать несколько сред.

С maven-antrun-plugin, вы можете использовать Exec задачу и установить атрибут spawn в true. Это заставит Ant выполнить задачу в фоновом режиме. Пример конфигурации будет:

<plugin> 
    <artifactId>maven-antrun-plugin</artifactId> 
    <version>1.8</version> 
    <executions> 
    <execution> 
     <phase> <!-- a lifecycle phase --> </phase> 
     <configuration> 
     <target> 
      <property name="runtime_classpath" refid="maven.runtime.classpath" /> 
      <exec executable="java" spawn="true"> 
      <arg value="-classpath"/> 
      <arg value="${runtime_classpath}"/> 
      <arg value="somepackage.AppServer"/> 
      </exec> 
     </target> 
     </configuration> 
     <goals> 
     <goal>run</goal> 
     </goals> 
    </execution> 
    </executions> 
</plugin> 

Обратите внимание, что это использует maven.runtime.classpath обратиться к классам Maven, содержащий все зависимости времени выполнения (см here для получения дополнительной информации).

+0

Точный .. очень точный :) подключен он должен проверить фазу, и это сработало как шарм, и я считаю, что его платформа тоже независима, и это бонус, в котором я нуждаюсь. – Gautam