【问题标题】:Maven configuration to share resource between modulesMaven 配置在模块之间共享资源
【发布时间】:2017-09-28 20:48:41
【问题描述】:

我正在开发一个包含 2 个模块的 maven 项目:“impl”生成一个带有资源的 jar,“server”生成一个服务器实现之战。

implementation
    |
    |-impl
    |  |-src
    |  |  |-main
    |  |     |-resources
    |  |-pom.xml
    |
    |-server
    |  |-src
    |  |  |-main
    |  |     |-java
    |  |  |-test
    |  |     |-java
    |  |-pom.xml
    |
    |-pom.xml

目前,当我尝试创建构建时,impl jar 文件包含在服务器 war 文件的 WEB-INF/lib 目录中,因此在生成服务器 war 文件后,正在对其进行解包,并在此基础上进行所有测试正在运行,一切正常。

作为要求,我必须将jar与war分开,这样war文件将不包含任何impl的jar文件,并且只有将jar文件放在tomcat的lib目录中才能使用war。

我尝试在服务器的 pom.xml 文件中执行此操作,并将 impl 模块设置为提供的范围,因此 jar 文件不再包含在 war 中,但现在测试失败,因为在解压缩用于运行测试,不包含所需的 impl jar 文件。 我可以在解压服务器war文件后将impl的jar文件复制到WEB-INF/lib目录中以便测试正常工作,或者可以将“impl”jar文件设置为就像它在服务器的WEB-INF/lib目录中一样运行测试,或者我的问题是否有其他可能的解决方案?

【问题讨论】:

  • 对这个 jar 文件使用 <scope>test</scope> 怎么样,这意味着它在测试类路径中......没有被打包到战争等中。我不明白的是为什么你需要解压缩你的用于运行测试的war文件?什么样的测试?

标签: java maven jar war


【解决方案1】:

您不必将 jar 的范围指定为 provided。只需将其作为正常依赖项包含在您的战争的 pom.xml 中即可。
相反,您可以简单地配置 Maven War Plugin排除您的 war 文件中的任何文件(包括 jar 文件)。
您必须使用maven war plugin<packagingIncludes> 配置参数。 请参阅下面的示例代码。

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-war-plugin</artifactId>
        <version>3.1.0</version>
        <configuration>
          <packagingExcludes>WEB-INF/lib/your_jar_name.jar</packagingExcludes>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
</project>

更多信息,您可以查看link

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2021-09-24
    • 1970-01-01
    • 2019-10-07
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2011-01-15
    相关资源
    最近更新 更多