Maven配置以在模块之间共享资源

Maven configuration to share resource between modules

我正在开发一个具有 2 个模块的 maven 项目:"impl" 生成带有资源的 jar,"server" 生成服务器实现的 war。

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 文件,并且 war 只有在我放置 jar 时才能工作tomcat 的 lib 目录中的文件。

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

您不必将 jar 的范围指定为 provided。只需将其作为正常依赖项包含在 war 的 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