1

我有一个 Maven 项目,它生成一个用于 Web 服务的 jar 文件。它具有使用jetty-maven-plugin运行的集成测试。

为了在编译的 jar 文件上运行集成测试,我必须使用<systemPath>${project.build.directory}/${project.build.finalName}.${project.packaging}</systemPath>. 集成测试如我所愿运行,使用编译的 jar 文件并从src/test目录中正确创建 web 应用程序。

所以就这个项目构建而言,这个设置非常有效。

问题是在发布过程中部署的POM文件仍然存在systemPath依赖关系。这意味着使用jar 的项目在构建期间报告错误。该错误表明 jar 文件“必须指定绝对路径”。这些构建不会失败,但日志混乱且具有误导性。

我希望systemPath从部署到我们的 Maven 存储库的 POM 中删除它。我们应该怎么做?

作为参考,这里是项目 POM 的相关部分。

<build>
  <plugins>
    <plugin>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-maven-plugin</artifactId>
      <version>9.0.7.v20131107</version>
      <configuration>
        <webAppSourceDirectory>${project.basedir}/src/test/webapp</webAppSourceDirectory>
        <classesDirectory>${project.build.testSourceDirectory}</classesDirectory>
        <useTestClasspath>true</useTestClasspath>
      </configuration>
      <dependencies>
        <dependency>
          <groupId>${project.groupId}</groupId>
          <artifactId>${project.artifactId}</artifactId>
          <version>${project.version}</version>
          <scope>system</scope>
          <systemPath>${project.build.directory}/${project.build.finalName}.${project.packaging}</systemPath>
        </dependency>
      </dependencies>
      <executions>
        <execution>
          <id>start-jetty</id>
          <phase>pre-integration-test</phase>
          <goals>
            <goal>run</goal>
          </goals>
          <configuration>
            <scanIntervalSeconds>0</scanIntervalSeconds>
            <daemon>true</daemon>
          </configuration>
        </execution>
        <execution>
          <id>stop-jetty</id>
          <phase>post-integration-test</phase>
          <goals>
            <goal>stop</goal>
          </goals>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>
4

2 回答 2

1

Jetty 的相关文档如下<classesDirectory>

为 webapp 编译的类的位置。[...]

所以,这应该是${project.build.testOutputDirectory}而不是${project.build.testSourceDirectory},不是吗?

<useTestClasspath>Jetty 的文档中没有提到。

是否可以install依赖和使用<scope>provided?从那以后:

[依赖项] 仅在编译和测试类路径上可用,并且不可传递。

于 2016-04-07T23:46:01.067 回答
0

解决方案是对Gerold Broser 的回答稍作修改。

以下是相关部分:

<plugin>
    <groupId>org.eclipse.jetty</groupId>
    <artifactId>jetty-maven-plugin</artifactId>
    <version>9.1.5.v20140505</version>
    <configuration>
        <webAppSourceDirectory>${project.basedir}/src/test/webapp</webAppSourceDirectory>
        <classesDirectory>${project.build.testOutputDirectory}</classesDirectory>
    </configuration>
    <dependencies>
        <dependency>
            <groupId>${project.groupId}</groupId>
            <artifactId>${project.artifactId}</artifactId>
            <version>${project.version}</version>
            <scope>runtime</scope>
        </dependency>
    </dependencies>
</plugin>
于 2017-05-09T01:26:32.347 回答