为什么Maven JAR插件不包含一些资源?

时间:2013-07-12 15:00:04

标签: maven maven-3 maven-jar-plugin

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

我使用Freemarker模板库生成应用程序发送的自动电子邮件的消息正文。 Freemarker需要将* .ftl模板文件放在类路径上,因为这是一个不是特定于一个WAR或另一个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,一些位于根目录,一些位于目录结构下。

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

这里变得奇怪而且我迷路了:当maven-jar-plugin创建JAR时,它包含XML和属性文件,但是JAR中完全没有模板目录,其内容无处可去被发现。

如上所述,我尝试明确地包括** / * .ftl。它并没有什么不同;我可以排除整个&#34;包括&#34;标签和我得到完全相同的行为。

我使用的是Maven 3.0.5和maven-jar-plugin 2.4。

1 个答案:

答案 0 :(得分:12)

在提交这个问题之后我找到了答案。

在父母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。