当前位置: 首页 > 知识库问答 >
问题:

模块间共享资源的Maven配置

左丘阳晖
2023-03-14

我正在处理一个包含两个模块的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目录中的行为,或者对于我的问题有没有其他可能的解决方案?

共有1个答案

衡修洁
2023-03-14

您不必像提供的那样指定JAR的作用域。只需将其作为正常依赖项包含在War的pom.xml中。
相反,您可以简单地配置Maven War插件以从War文件中排除任何文件(包括jar文件)。
您必须使用Maven War插件 配置参数。请参阅下面的示例代码。

<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>

更多信息,您可以查看此链接。

 类似资料:
  • 我有一个Maven项目,其中有一个parent-pom项目和3个maven-module项目。其中2个模块是编译成WAR文件的Java-EE web应用程序。其中1个模块包含公共JAVA代码,这些代码在其他2个项目之间共享。共享JAVA代码很容易。 我的问题是如何共享常见的静态资源,如JavaScript、CSS和图像文件,而不在每个web模块中重复它们?我还希望这样做:我可以继续从Eclipse

  • 资源共享 资源共享目前面临的问题主要包括: 共享过程成本过高; 用户身份评分难 共享服务管理难 短租共享 大量提供短租服务的公司已经开始尝试用区块链来解决共享中的难题。 一份来着 高盛的报告 中宣称: Airbnb 等 P2P 住宿平台已经开始通过利用私人住所打造公开市场来变革住宿行业,但是这种服务的接受程度可能会因人们对人身安全以及财产损失的担忧而受到限制。而如果通过引入安全且无法篡改的数字化资

  • 问题内容: 我有一个多模块的Maven项目。为了这个示例,请考虑两个模块: 模块将模块作为依赖项。 模块声明了一堆核心类。有使用它们的测试。这些测试需要创建一些冗长的对象,因此我有一个带有一些实用程序方法的类来创建这些对象。实用程序类()在层次结构中。 我在模块中也进行了一些测试,这些测试需要创建一些冗长的对象。我想在我的树中的测试中使用我的类(在中定义)。不幸的是,即使是的依赖项,也无法看到存在

  • 我有一个多模块Maven项目。在本例中,考虑两个模块: 模块具有模块作为依赖项。 为了解决这个问题,我想我可以创建另一个模块(),并将移到下。那么我将包含作为的测试范围依赖项。不幸的是,这引入了循环依赖关系:使用,但还需要。 我想出的唯一解决方案是将放在下,放在包下,希望真正的应用程序代码不会调用它。 如何在模块之间共享我的类,而不将其放在下?

  • 共享模块 Nest Modules can export their components. It means that we can easily share component instance between them. The best way to share an instance between two or more modules is to create Shared Modu

  • 通过XHR 实现Ajax 通信的一个主要限制,来源于跨域安全策略。默认情况下,XHR 对象只能访问与包含它的页面位于同一个域中的资源。这种安全策略可以预防某些恶意行为。但是,实现合理的跨域请求对开发某些浏览器应用程序也是至关重要的。 CORS(Cross-Origin Resource Sharing,跨源资源共享)是W3C 的一个工作草案,定义了在必须访问跨源资源时,浏览器与服务器应该如何沟通。