我使用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中包含属性文件?
答案 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包含资源目录中的所有内容。