gpt4 book ai didi

maven - 为什么 Maven JAR 插件不包含某些资源?

转载 作者:行者123 更新时间:2023-12-04 10:39:45 25 4
gpt4 key购买 nike

我有一个企业应用程序,正在从 Ant 构建转换为 Maven。它几乎完全转换了;这是我需要解决的最后一件事。该应用程序被打包为一个 EAR 文件,该文件包含两个 WAR,并具有一个 JAR 模块,该模块提供该应用程序的所有核心功能。

我正在使用 Freemarker 模板库为应用程序发送的自动电子邮件生成消息正文等。 Freemarker 需要将其 *.ftl 模板文件放在类路径中,并且由于这是核心应用程序功能,并非特定于一个 WAR 或其他,它需要在 JAR 中。

定义 JAR 的 Maven 模块具有以下 POM:

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>

<parent>
<relativePath>../../pom.xml</relativePath>
<groupId>com.company.project</groupId>
<artifactId>projectName</artifactId>
<version>1.8.0</version>
</parent>

<artifactId>core</artifactId>
<packaging>jar</packaging>
<name>Core Application</name>

<profiles>
<!-- snip -->
</profiles>

<dependencies>
<!-- snip -->
</dependencies>

<build>
<resources>
<resource>
<directory>src/main/resources</directory>
<filtering>true</filtering>
<includes>
<include>**/*.ftl</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</resource>
</resources>
<plugins>
<!-- snip -->
</plugins>
</build>
</project>

*.ftl 文件位于 src/main/resources/template/,其中一些位于 template/的子目录中。在 src/main/resources 中还有其他文件——一些 .properties 和一些 .xml,一些在根目录下,一些在目录结构下。

当我在这个模块(或父模块)上运行包阶段时,作为构建过程的一部分创建的目标/类目录包含模板目录,该目录又包含所有 *.ftl、*.xml 和 * .properties 具有适当目录结构的文件。如果我手动 JAR 这个目录,一切正常。

这就是奇怪的地方,我迷路了:当 maven-jar-plugin 创建 JAR 时,它包括 XML 和属性文件,但是 JAR 中完全没有模板目录,并且找不到它的内容。

正如您在上面看到的,我尝试明确包含 **/*.ftl。这没有什么区别;我可以排除整个“包含”标签,我得到完全相同的行为。

我正在使用 Maven 3.0.5 和 maven-jar-plugin 2.4。

最佳答案

提交此问题后,我找到了正确的答案。

在父 POM 中,我有以下内容:

<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<configuration>
<includes>
<include>**/*.class</include>
<include>**/*.jdo</include>
<include>**/*.properties</include>
<include>**/*.xml</include>
</includes>
</configuration>
</plugin>

我添加了 **/*.ftl到包含列表中,现在它正在工作。

编辑:更好的是,我完全删除了配置标签,它仍在工作。我认为这是在我发现类路径上需要的 .properties 文件和其他东西需要位于 src/main/resources 而不是 src/main/java 之前的残余。

关于maven - 为什么 Maven JAR 插件不包含某些资源?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/17617964/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com