2013-07-12 130 views
5

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

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

行家模块,其限定了JAR具有以下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 /主/资源/模板/,与一些在模板/的子目录中。 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。

回答

10

提交此问题后,我想出了答案RIGHT。

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

相关问题