Maven构建排除所有文件而不是java文件

时间:2015-02-04 12:03:27

标签: maven maven-3 pom.xml

我使用maven-archetype-quickstart工件创建了一个maven项目。并获得了这样的目录结构:

my-app
+src
++main
+++java
++++com
+++++mycompnay
++test

现在,问题是,当我将文件放在java文件夹中而不是*.java文件时,执行mvn clean install后它不会包含在jar文件中。

以下是使用jar tf target/my-app-1.0-SNAPSHOT.jar添加这些文件后的目录结构:

my-app
+src
++main
+++java
++++com
+++++mycompnay
++++++app
+++++++Blabla.java
+++++++Blabla.properties
++test

以下是目标文件夹中jar文件的内容:

META-INF/
META-INF/MANIFEST.MF
com/
com/mycompany/
com/mycompany/app/
com/mycompany/app/Blabla.class
META-INF/maven/
META-INF/maven/com.mycompany.app/
META-INF/maven/com.mycompany.app/my-app/
META-INF/maven/com.mycompany.app/my-app/pom.xml
META-INF/maven/com.mycompany.app/my-app/pom.properties

如何在jar中包含属性文件?

1 个答案:

答案 0 :(得分:1)

首选解决方案

创建一个resources目录,如Standard Directory Layout所示,并复制src/main/java的相同目录结构,并将文件放在相应的目录中。在您的情况下,它将如下所示:

my-app
+src
++main
+++resources
++++com
+++++mycompnay
++++++Blabla.properties
+++java
++++com
+++++mycompnay
++++++Blabla.java
++test

快速解决方案

打开项目pom.xml并添加以下行:

<build>
    <resources>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
            </includes>
        </resource>
    </resources>
</build>

告知我要在*.properties目录中加入src/main/java个文件,而不是*.properties*.java但这不是标准的,因此没有建议。


应用jar文件的任何解决方案内容后,将如下所示:

META-INF/
META-INF/MANIFEST.MF
com/
com/mycompany/
com/mycompany/app/
com/mycompany/app/Blabla.class
com/mycompany/app/Blabla.properties
META-INF/maven/
META-INF/maven/com.mycompany.app/
META-INF/maven/com.mycompany.app/my-app/
META-INF/maven/com.mycompany.app/my-app/pom.xml
META-INF/maven/com.mycompany.app/my-app/pom.properties

如果我们对资源文件夹中包含文件的原因感兴趣,我们需要咨询super pom。所有pom.xml inhertis来自这个pom。我们可以在<resource>中看到super pom标记:

<resources>
    <resource>
        <directory>${project.basedir}/src/main/resources</directory>
    </resource>
</resources>

它告诉maven包含资源目录中的所有内容。