我有一个 maven 项目,它需要从另一个打包为 war 的 maven 项目中复制 webapp/WEB-INF/ 资源。我该怎么做 ?请建议
3 回答
正如 Bittrance 所说,您应该使用 maven 依赖插件。
更好的方法是创建包含所有共享资源的项目,可能是 zip 类型,它是使用程序集插件构建的。这是好的“行家之道”。这是一个比解开战争更好的解决方案。
然后参考一下
<dependency>
<groupId>com.mygroup/groupId>
<artifactId>my-dependencies</artifactId>
<version>1.0.0</version>
<type>zip</type>
</dependency>
接下来,您使用 maven 依赖插件解压您的资源,在您选择的目录中(可能是 WEB-INF/ ?)
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<executions>
<execution>
<id>unpack-cfg-test-resources</id>
<goals>
<goal>unpack-dependencies</goal>
</goals>
<phase>resources</phase>
<configuration>
<outputDirectory>${project.build.directory}/WEB-INF/</outputDirectory>
<includeArtifacIds>my-resources</includeArtifacIds>
<excludeTypes>pom</excludeTypes>
<excludeTransitive>true</excludeTransitive>
</configuration>
</execution>
</executions>
</plugin>
我不太确定这个代码片段(为其他目的而编写),但这是一个示例。欲了解更多信息,请点击此链接:http ://maven.apache.org/plugins/maven-dependency-plugin/
如果您无法共享包含文件的公共项目,则可以解压缩仅包含 ftl(或任何您想要的)的战争,但这不是一个真正干净的解决方案;)
有很多关于这个主题的帖子: Unzip dependency in maven ...只需尝试使用关键字 maven-dependency-plugin, unpack :)
希望对您有所帮助。
我可以看到一些替代方案:
- 在您的版本控制系统中使用外部引用将所有存储库指向相同的文件。
- Maven 依赖模块可以复制和解压项目依赖。从那里,您可以使用 Maven 程序集插件(或 Ant 目标)在您自己的安装中包含该依赖项的一部分。
- 至少对于 FTL 文件,也许您可以将它们打包到单独的 Jar 文件中,然后通过类加载器将它们作为资源加载。
如果资源被过滤,如果你想要过滤版本,你可能会遇到解决方案 1 的问题,如果你想要源版本,则可能会遇到问题 2、3。
希望这可以帮助。
(这假设您的依赖项目是 java (jar) 而不是另一个 Web 应用程序,如果它是一个 Web 应用程序,我认为解决方案是相似的)。
我建议一种(稍微)不同的方法:
不要从战争中读取资源,而是将其添加到您的战争 pom 中,以在工件和战争中生成一个 jar:
<!-- maven war plugin config -->
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<configuration>
...
<attachClasses>true</attachClasses>
<classesClassifier>some-string</classesClassifier>
</configuration>
<artifactId>maven-war-plugin</artifactId>
<version>3.0.0</version>
</plugin>
...
<resources>
<!-- This is for inclusion in the jar, so dependent module can load it -->
<resource>
<targetPath>some-path</targetPath>
<directory>src/main/webapp/path...</directory>
<includes>
<include>your-resource</include>
</includes>
</resource>
</resources>
这对你的消费 pom,所以生成的 jar 将被加载:
<dependency>
<groupId>com.company</groupId>
<artifactId>...</artifactId>
<classifier>some-string</classifier>
</dependency>
然后您将能够以通常的方式加载资源 ( getResourceAsStream("some-path/your-resource")
)