我创建了一个 pom.xml 来编译我的项目并将其打包为jar, 确实它是comiples和jar被创建 - 问题是我有一个包含类和java的jar,我只想要里面的类。
如何丢失java文件?我不需要它们。
这是我创建的 pom.xml :
<build>
<resources>
<resource>
<directory>src/main/java</directory>
<filtering>true</filtering>
</resource>
</resources>
<finalName>api-interfaces</finalName>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.4</version>
<executions>
<execution>
<id>make-a-jar</id>
<phase>compile</phase>
<goals>
<goal>jar</goal>
</goals>
</execution>
</executions>
<configuration>
<excludes>
<exclude>*.properties</exclude>
<exclude>*.xml</exclude>
<exclude>sql/**</exclude>
<exclude>META-INF/**</exclude>
<exclude>*.jar</exclude>
<exclude>*.java</exclude>
<exclude>default-configs/**</exclude>
</excludes>
</configuration>
</plugin>
</plugins>
</build>
答案 0 :(得分:5)
这是罪魁祸首:
<resources>
<resource>
<directory>src/main/java</directory>
<filtering>true</filtering>
</resource>
</resources>
有了这个,你明确指出src/main/java
中的文件,即.java
文件,应该包含在jar中。
您可以使用标准maven布局并将资源放入src/main/resources
,或使用以下方法明确排除.java
个文件:
<resources>
<resource>
<directory>src/main/java</directory>
<filtering>true</filtering>
<excludes>
<exclude>**/*.java</exclude>
</excludes>
</resource>
</resources>
有关更多信息,请参阅maven resource plugin,尤其是include/exclude examples
答案 1 :(得分:2)
是否有充分理由明确将maven-jar-plugin:jar
目标绑定到compile
阶段?编译阶段仅针对"compile the source code of the project",而不是其他任何内容。
在jar
打包项目中,jar:jar
目标默认绑定到package
阶段,“获取已编译的代码并将其打包为可分发的格式,例如JAR。“
resources:resouces
目标绑定到process-resources
阶段,“将资源复制并处理到目标目录,准备打包。”
将默认目标绑定到非默认阶段更像是针对Maven而不是使用它。
通过使用@SillyFreak在他的回答中提到的src/main/resources
,您可能根本不需要在POM中使用此构建步骤定义。