我有以下pom
<project>
....
<packaging>war</packaging>
....
<build>
<plugins>
<plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<configuration>
<excludes>
<exclude>config/**/*</exclude>
</excludes>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<version>2.3</version>
<configuration>
<archiveClasses>true</archiveClasses>
<warSourceExcludes>WEB-INF/sass/**</warSourceExcludes>
<attachClasses>true</attachClasses>
<webResources>
<resource>
<directory>src/main/resources/config</directory>
<excludes>
<exclude>**/*</exclude>
</excludes>
</resource>
</webResources>
</configuration>
</plugin>
...
</project>
正如您所看到的,当我的.class
文件不在我的WEB-INF/classes
文件夹中时,我打包了一个WAR - 它们被打包成一个JAR。
现在,我拼命想从我的JAR中排除一些资源 - 但它不起作用。当我运行mvn jar:jar
时 - 资源被排除,但是当我运行mvn package
时,资源就在那里。
请帮忙。
答案 0 :(得分:1)
似乎@ user944849是正确的 - 事实上,war插件不使用jar插件来实现JAR打包。
然而,他的答案仍然给我一个错误的结果,因为它只会创建2个罐子 - 一个是资源而另一个没有。 WAR仍将使用错误的WAR。
正确答案是使用新的maven resources
标记。
与我的配置对应的那个如下
<build>
....
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>config/**/*</exclude>
</excludes>
<filtering>false</filtering>
</resource>
</resources>
....
</build>
答案 1 :(得分:0)
您没有将jar:jar
目标绑定到生命周期阶段。从命令行运行jar:jar
时,排除很正常;当你运行mvn clean package
时,我怀疑jar:jar
没有执行。尝试将目标绑定到阶段:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<executions>
<execution>
<goals><goal>jar</goal></goals>
<phase>prepare-package</phase>
<configuration>
<excludes>
<exclude>config/**/*</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
仅供参考,war:war plugin goal的archiveClasses
功能与我认为您尝试实现的功能类似,而无需单独的插件配置。