运行 使用 jetty-maven-plugin 的 Jetty 并在 jetty 为 运行 时完成构建
Run Jetty with jetty-maven-plugin and finish the build when jetty is running
我想 运行 使用 jetty-maven-plugin 的 Jetty 并在 jetty 运行ning 时完成构建。
我创建了一个 pom.xml 来启动码头并部署一个 war 文件,
在码头启动后,我希望 maven 在离开码头 运行ning 的同时完成构建,这样我就可以在 运行 码头上的服务器上开始另一个 Maven 构建以进行 运行 测试。
然后我将创建另一个只停止码头服务器的 Maven 构建。
问题是我没有设法启动码头并在那之后停止 maven 构建,有人知道该怎么做吗?
p.s
我为此使用了 "run-forked",但它仍在等待停止信号,因此构建被卡住了。
这是 jetty-start 配置文件:
<profile>
<id>start-jetty</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<war>${unpacked.war.directory}</war>
<contextXml>${unpacked.war.directory}/WEB-INF/jetty-web.xml</contextXml>
<webApp>
<contextPath>/qabin</contextPath>
</webApp>
<systemProperties>
<systemProperty>
<name>mercy.td.sa_config_dir</name>
<value>${tests.runtime}</value>
</systemProperty>
<systemProperty>
<name>jetty.port</name>
<value>${jetty.start.port}</value>
</systemProperty>
</systemProperties>
<stopPort>${jetty.stop.port}</stopPort>
<stopKey>STOP</stopKey>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run-forked</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
应该清楚Maven是一个构建工具,而不是一个命令执行工具。
Starting/stopping Jetty 应该是集成测试执行阶段中同一构建的一部分。此外,您还在两个 Maven 构建(实际上不是有效构建)之间创建依赖关系,如果停止构建失败(无论出于何种原因),这可能是您 CI 环境的一部分的问题 - 并离开启动码头和 运行ning 并因此在未定义的时间内消耗您的 CI 服务器上的资源。
一个简单的 start/test/stop 流程可以作为同一个 Maven 构建的一部分实现如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.8.v20150217</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
<stopWait>2</stopWait>
<webApp>
<contextPath>/examplecomponent</contextPath>
</webApp>
<httpConnector>
<port>7777</port>
</httpConnector>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.2.8.v20150217</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
基本上,您将 surefire 插件配置为在测试阶段跳过集成测试,然后在集成测试之前启动 jetty,执行集成测试(基于后缀),然后停止 jetty。
我还建议将其移动到一个配置文件中,以使默认构建更快并独立于集成测试,这样它也可以在离线时 运行 成功,然后在需要时激活配置文件(即在 CI 版本上)。
已更新:如果您确实需要在一个 Maven 项目中启动并在其他 Maven 模块中停止,您可以应用以下方法:
有一个 aggregator/multimodule maven 项目:一个模块将提供启动,另一个模块将提供停止,其他模块将使用 运行ning 码头。然而,maven 反应器可能不会按照你希望的顺序调用它们,你应该确保停止模块依赖于启动模块(将其作为依赖项)并且任何需要 运行ning 模块的模块也将具有启动模块作为依赖项。此外,停止模块还应该依赖于测试模块,以便它只会在结束时执行。这应该够了吧。
因此,总结一下:
- jetty-question(聚合器项目)
- 启动码头模块
- use-jetty-module(有 start-jetty-module 作为依赖项)
- stop-jetty-module(有 start-jetty-module 和 use-jetty-module 作为依赖项)
更新 2:低于工作方法(在 Windows 机器上测试)
这是聚合器项目的 pom 文件,jetty-question:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-question</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>jetty-start</module>
<module>jetty-stop</module>
<module>jetty-use</module>
</modules>
</project>
注意模块声明和打包为 pom(聚合器需要)。
这里是jetty-start模块的pom文件,是嵌套在jetty-question下的一个文件夹
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-question</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>jetty-start</artifactId>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>verify</phase>
<configuration>
<target>
<exec executable="cmd.exe" spawn="true">
<arg value="/c" />
<arg value="mvn jetty:run" />
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.8.v20150217</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
<stopWait>2</stopWait>
<webApp>
<contextPath>/jetty-start</contextPath>
</webApp>
<httpConnector>
<port>7777</port>
</httpConnector>
</configuration>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.2.8.v20150217</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
注意:模块正在配置jetty插件,然后通过ant运行插件执行后台进程执行mvnjetty:run
在我的示例代码中,部署的应用程序简单地提供了一个 index.html 页面打印 Hello world.
这里是jetty-use模块的pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-question</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>jetty-use</artifactId>
<dependencies>
<dependency>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-start</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
重要:如上所述,它需要依赖于 jetty-start 模块,以便 reactor maven 构建将在 jetty-start 之后执行它(因此我们确信 jetty 将是 运行执行此构建时 ning)。
注意 Junit 和 selenium 的依赖关系,我使用它们通过下面的 junit 集成测试有效地测试了 运行ning 码头:
public class AppIntegrationTest extends TestCase {
public void testApp() throws Exception {
// Create a new instance of the Firefox driver
WebDriver driver = new HtmlUnitDriver();
// Launch the Online Store Website
driver.get("http://localhost:7777/jetty-start");
WebElement element = driver.findElement(By.id("title"));
Assert.assertNotNull(element);
Assert.assertNotNull(element.getText());
Assert.assertEquals("Hello World!", element.getText());
}
}
最后,这里是jetty-stop模块的pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-question</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>jetty-stop</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>verify</phase>
<configuration>
<target>
<exec executable="cmd.exe" spawn="true">
<arg value="/c" />
<arg value="mvn jetty:stop" />
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.8.v20150217</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
<stopWait>2</stopWait>
<httpConnector>
<port>7777</port>
</httpConnector>
</configuration>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.2.8.v20150217</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-start</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-use</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
注意与 jetty-start 模块类似的配置。该模块还配置 jetty 插件,并通过 ant运行 插件停止它,该插件将在后台执行 mvn jetty:stop 目标。
还要注意这个模块的依赖关系:它需要同时依赖 jetty-start 和 jetty-use 以便 maven reactor build 将在最后执行它。
进一步说明:jetty-start 和 jetty-stop 模块上的 jetty 配置显然需要共享停止键和停止端口。对于此示例,服务器端口在 pom 文件中进行了硬编码(jetty-start 和 jetty-stop 模块也需要相同),但您也可以将其移动到父模块中的 属性。
此外,ant运行 插件在 Windows 模式下执行后台进程。如果您 运行ning 在 Linux 上,& 后缀也应该可以解决问题。
我还建议将它保存在一个多模块项目中,这样你就可以确保依赖项耦合在一起。
尽管我不建议使用此答案顶部所述的这种方法,但让它发挥作用既具有挑战性又很有趣,所以感谢您带来的乐趣。希望你也能成功。
我想 运行 使用 jetty-maven-plugin 的 Jetty 并在 jetty 运行ning 时完成构建。
我创建了一个 pom.xml 来启动码头并部署一个 war 文件, 在码头启动后,我希望 maven 在离开码头 运行ning 的同时完成构建,这样我就可以在 运行 码头上的服务器上开始另一个 Maven 构建以进行 运行 测试。
然后我将创建另一个只停止码头服务器的 Maven 构建。
问题是我没有设法启动码头并在那之后停止 maven 构建,有人知道该怎么做吗?
p.s 我为此使用了 "run-forked",但它仍在等待停止信号,因此构建被卡住了。
这是 jetty-start 配置文件:
<profile>
<id>start-jetty</id>
<activation>
<activeByDefault>false</activeByDefault>
</activation>
<build>
<plugins>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<configuration>
<war>${unpacked.war.directory}</war>
<contextXml>${unpacked.war.directory}/WEB-INF/jetty-web.xml</contextXml>
<webApp>
<contextPath>/qabin</contextPath>
</webApp>
<systemProperties>
<systemProperty>
<name>mercy.td.sa_config_dir</name>
<value>${tests.runtime}</value>
</systemProperty>
<systemProperty>
<name>jetty.port</name>
<value>${jetty.start.port}</value>
</systemProperty>
</systemProperties>
<stopPort>${jetty.stop.port}</stopPort>
<stopKey>STOP</stopKey>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>run-forked</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
<daemon>true</daemon>
</configuration>
</execution>
</executions>
</plugin>
</plugins>
</build>
</profile>
应该清楚Maven是一个构建工具,而不是一个命令执行工具。 Starting/stopping Jetty 应该是集成测试执行阶段中同一构建的一部分。此外,您还在两个 Maven 构建(实际上不是有效构建)之间创建依赖关系,如果停止构建失败(无论出于何种原因),这可能是您 CI 环境的一部分的问题 - 并离开启动码头和 运行ning 并因此在未定义的时间内消耗您的 CI 服务器上的资源。
一个简单的 start/test/stop 流程可以作为同一个 Maven 构建的一部分实现如下:
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-surefire-plugin</artifactId>
<executions>
<execution>
<id>integration-test</id>
<goals>
<goal>test</goal>
</goals>
<phase>integration-test</phase>
<configuration>
<excludes>
<exclude>none</exclude>
</excludes>
<includes>
<include>**/*IntegrationTest.java</include>
</includes>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.8.v20150217</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
<stopWait>2</stopWait>
<webApp>
<contextPath>/examplecomponent</contextPath>
</webApp>
<httpConnector>
<port>7777</port>
</httpConnector>
</configuration>
<executions>
<execution>
<id>start-jetty</id>
<phase>pre-integration-test</phase>
<goals>
<goal>start</goal>
</goals>
<configuration>
<scanIntervalSeconds>0</scanIntervalSeconds>
</configuration>
</execution>
<execution>
<id>stop-jetty</id>
<phase>post-integration-test</phase>
<goals>
<goal>stop</goal>
</goals>
</execution>
</executions>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.2.8.v20150217</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
基本上,您将 surefire 插件配置为在测试阶段跳过集成测试,然后在集成测试之前启动 jetty,执行集成测试(基于后缀),然后停止 jetty。
我还建议将其移动到一个配置文件中,以使默认构建更快并独立于集成测试,这样它也可以在离线时 运行 成功,然后在需要时激活配置文件(即在 CI 版本上)。
已更新:如果您确实需要在一个 Maven 项目中启动并在其他 Maven 模块中停止,您可以应用以下方法: 有一个 aggregator/multimodule maven 项目:一个模块将提供启动,另一个模块将提供停止,其他模块将使用 运行ning 码头。然而,maven 反应器可能不会按照你希望的顺序调用它们,你应该确保停止模块依赖于启动模块(将其作为依赖项)并且任何需要 运行ning 模块的模块也将具有启动模块作为依赖项。此外,停止模块还应该依赖于测试模块,以便它只会在结束时执行。这应该够了吧。 因此,总结一下:
- jetty-question(聚合器项目)
- 启动码头模块
- use-jetty-module(有 start-jetty-module 作为依赖项)
- stop-jetty-module(有 start-jetty-module 和 use-jetty-module 作为依赖项)
更新 2:低于工作方法(在 Windows 机器上测试) 这是聚合器项目的 pom 文件,jetty-question:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-question</artifactId>
<version>1.0.0-SNAPSHOT</version>
<packaging>pom</packaging>
<modules>
<module>jetty-start</module>
<module>jetty-stop</module>
<module>jetty-use</module>
</modules>
</project>
注意模块声明和打包为 pom(聚合器需要)。
这里是jetty-start模块的pom文件,是嵌套在jetty-question下的一个文件夹
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-question</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>jetty-start</artifactId>
<packaging>war</packaging>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>verify</phase>
<configuration>
<target>
<exec executable="cmd.exe" spawn="true">
<arg value="/c" />
<arg value="mvn jetty:run" />
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.8.v20150217</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
<stopWait>2</stopWait>
<webApp>
<contextPath>/jetty-start</contextPath>
</webApp>
<httpConnector>
<port>7777</port>
</httpConnector>
</configuration>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.2.8.v20150217</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
</project>
注意:模块正在配置jetty插件,然后通过ant运行插件执行后台进程执行mvnjetty:run 在我的示例代码中,部署的应用程序简单地提供了一个 index.html 页面打印 Hello world.
这里是jetty-use模块的pom文件:
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-question</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>jetty-use</artifactId>
<dependencies>
<dependency>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-start</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>junit</groupId>
<artifactId>junit</artifactId>
<version>3.8.1</version>
<scope>test</scope>
</dependency>
<dependency>
<groupId>org.seleniumhq.selenium</groupId>
<artifactId>selenium-java</artifactId>
<version>2.47.1</version>
<scope>test</scope>
</dependency>
</dependencies>
</project>
重要:如上所述,它需要依赖于 jetty-start 模块,以便 reactor maven 构建将在 jetty-start 之后执行它(因此我们确信 jetty 将是 运行执行此构建时 ning)。 注意 Junit 和 selenium 的依赖关系,我使用它们通过下面的 junit 集成测试有效地测试了 运行ning 码头:
public class AppIntegrationTest extends TestCase {
public void testApp() throws Exception {
// Create a new instance of the Firefox driver
WebDriver driver = new HtmlUnitDriver();
// Launch the Online Store Website
driver.get("http://localhost:7777/jetty-start");
WebElement element = driver.findElement(By.id("title"));
Assert.assertNotNull(element);
Assert.assertNotNull(element.getText());
Assert.assertEquals("Hello World!", element.getText());
}
}
最后,这里是jetty-stop模块的pom文件
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<parent>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-question</artifactId>
<version>1.0.0-SNAPSHOT</version>
</parent>
<artifactId>jetty-stop</artifactId>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-antrun-plugin</artifactId>
<version>1.6</version>
<executions>
<execution>
<phase>verify</phase>
<configuration>
<target>
<exec executable="cmd.exe" spawn="true">
<arg value="/c" />
<arg value="mvn jetty:stop" />
</exec>
</target>
</configuration>
<goals>
<goal>run</goal>
</goals>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-maven-plugin</artifactId>
<version>9.2.8.v20150217</version>
<configuration>
<scanIntervalSeconds>10</scanIntervalSeconds>
<stopKey>foo</stopKey>
<stopPort>9999</stopPort>
<stopWait>2</stopWait>
<httpConnector>
<port>7777</port>
</httpConnector>
</configuration>
<dependencies>
<dependency>
<groupId>org.eclipse.jetty</groupId>
<artifactId>jetty-util</artifactId>
<version>9.2.8.v20150217</version>
</dependency>
</dependencies>
</plugin>
</plugins>
</build>
<dependencies>
<dependency>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-start</artifactId>
<version>1.0.0-SNAPSHOT</version>
<type>war</type>
</dependency>
<dependency>
<groupId>com.Whosebug</groupId>
<artifactId>jetty-use</artifactId>
<version>1.0.0-SNAPSHOT</version>
</dependency>
</dependencies>
</project>
注意与 jetty-start 模块类似的配置。该模块还配置 jetty 插件,并通过 ant运行 插件停止它,该插件将在后台执行 mvn jetty:stop 目标。 还要注意这个模块的依赖关系:它需要同时依赖 jetty-start 和 jetty-use 以便 maven reactor build 将在最后执行它。
进一步说明:jetty-start 和 jetty-stop 模块上的 jetty 配置显然需要共享停止键和停止端口。对于此示例,服务器端口在 pom 文件中进行了硬编码(jetty-start 和 jetty-stop 模块也需要相同),但您也可以将其移动到父模块中的 属性。 此外,ant运行 插件在 Windows 模式下执行后台进程。如果您 运行ning 在 Linux 上,& 后缀也应该可以解决问题。 我还建议将它保存在一个多模块项目中,这样你就可以确保依赖项耦合在一起。
尽管我不建议使用此答案顶部所述的这种方法,但让它发挥作用既具有挑战性又很有趣,所以感谢您带来的乐趣。希望你也能成功。