【问题标题】:How do i include resources from a jar dependency project in a war file如何在war文件中包含来自jar依赖项目的资源
【发布时间】:2015-12-26 13:46:05
【问题描述】:

一个maven项目WEBAPP是一个war包装。 依赖于CORE项目(jar打包) 在 WEBAPP 内部,我想从 CORE 项目访问 src/main/resource 目录下的资源。 mvn clean install 似乎没有将这些 CORE 资源放在 war 类路径中。

我需要在 poms 中指定什么来执行此包含?

【问题讨论】:

  • 你在WEBAPP中添加CORE Project(jar)的依赖了吗?
  • 是的依赖添加到核心项目

标签: java maven


【解决方案1】:

默认情况下,添加到src/main/resource 目录的资源将包含在生成的jar 中。

您可以使用以下方式访问它们:

this.getClass().getResource("yourFile");

this.getClass().getResourceAsStream("yourFile");

您可以通过手动打开/提取资源(使用 zip 实用程序)来验证您的资源是否包含在 jar 中。您的资源应位于jar 文件的根目录下。

【讨论】:

  • 资源已添加到 jar 中,但无法通过战争访问
  • 在这种情况下,您可以在 jar 中编写一个公共方法来获取资源,然后从 war 中调用它,或者您可以将资源移动到 war 文件中。
  • 获取 jar 资源的方法已经公开,所以不确定我是否理解您评论的第一部分,并且我不想复制资源,因为它在多个模块中重复使用。 Maven远程资源插件是要走的路,请参阅下面的答案。但是,您的回答对我的搜索很有用。
【解决方案2】:

使用maven依赖将核心项目添加到你的主项目中

   <dependency>
        <groupId>Group ID of Core Project</groupId>
        <artifactId>Artifact ID of Core Project</artifactId>
        <version>Core Project Verion</version>          
    </dependency>

然后在Core项目中创建一个方法来从core-resources中读取属性。然后通过该方法返回值。

因此,在将 Core 项目依赖项添加到主项目后,您可以访问该方法并读取主项目中的属性。

【讨论】:

  • 它已经这样做了,但是当从战争中调用该方法时,它无法从 jar 中读取资源。可能是由于使用了 SPring pathresolver?还是因为我试图从 src/main/resources 读取子目录中的资源?
  • 是的,我可以从 Core 读取它。在进行一些 Junit 测试时,我什至能够从 Eclipse 中的 WEBAPP 读取它。仅当我为部署执行 mvn clean install 时才会出现问题。显然需要明确告诉 Maven 从依赖项 jar 中复制资源。 Maven 远程资源插件是让它工作的方法。
【解决方案3】:

Maven 在构建战争档案时不包含 jar 依赖资源。 maven-remote-resources 插件是实现它的一种方式。 this SO question on copying resources 让我接受它

几乎照字面意思复制example page of the plugin documentation。我想包含在 WEBAPP 中的资源位于src/main/resources/rulesproperties directory 下。在 CORE pom.xml 插件部分添加:

   <plugin>
        <artifactId>maven-remote-resources-plugin</artifactId>
        <version>1.5</version>
        <executions>
          <execution>
            <goals>
              <goal>bundle</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <includes>
            <include>**/rulesproperties/*</include>
          </includes>
        </configuration>
      </plugin>

并在 WEBAPP pom.xml 插件部分,添加

  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-remote-resources-plugin</artifactId>
    <version>1.5</version>
    <configuration>
      <resourceBundles>
        <resourceBundle>mvnGroupId:CORE:${project.version}</resourceBundle>
      </resourceBundles>
    </configuration>
    <executions>
      <execution>
        <goals>
          <goal>process</goal>
        </goals>
      </execution>
    </executions>
  </plugin> 

在 webapp 项目的 mvn clean install 之后,rulesproperties 目录及其内容位于 WEB-INF/CLASSES 目录下,并且可以像任何其他类路径资源一样正确访问。

【讨论】:

    猜你喜欢
    • 2014-06-05
    • 1970-01-01
    • 2014-10-06
    • 2019-06-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-06-30
    相关资源
    最近更新 更多