当使用Maven程序集插件(版本2.2-beta-5)时,如果它们具有相同的路径,则看起来组装的jar将包含来自依赖项的资源,而不是正在组装的项目。具体来说,我试图弄清楚如何使用项目的log4j配置文件而不是依赖项目。
PROJECT1
-src
- 主
---资源
----的log4j.xml
如果Project1有一个依赖项 - 称之为Project2 - 在src / main / resources中也有一个log4j.xml文件,那么在运行程序集插件后,组装的jar包含Project2的log4j.xml文件而不是Project1。我相信这是因为所有的依赖项首先被解压缩,因此当它尝试解压缩顶层项目时,log4j.xml文件已经存在,因此它不会被覆盖。
组件插件是否使用项目的文件而不是依赖项?
答案 0 :(得分:3)
这样的事情应该有效:
<assembly>
<id>without-log4j-config</id>
<formats>
<format>jar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
<scope>runtime</scope>
<unpackOptions>
<excludes>
<exclude>**/log4j.xml</exclude>
<exclude>**/log4j.properties</exclude>
</excludes>
</unpackOptions>
</dependencySet>
</dependencySets>
<files>
<file>
<source>pom.xml</source>
<outputDirectory>/</outputDirectory>
</file>
</files>
<fileSets>
<fileSet>
<useDefaultExcludes>false</useDefaultExcludes>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/java</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
<moduleSets>
<moduleSet>
<includeSubModules>false</includeSubModules>
<sources>
<outputDirectoryMapping>/</outputDirectoryMapping>
<excludeSubModuleDirectories>false</excludeSubModuleDirectories>
<fileSets>
<fileSet>
<directory>src/main/java</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
<fileSet>
<directory>src/main/resources</directory>
<outputDirectory>/</outputDirectory>
</fileSet>
</fileSets>
</sources>
<binaries>
<dependencySets>
<dependencySet>
<unpack>true</unpack>
</dependencySet>
</dependencySets>
</binaries>
</moduleSet>
</moduleSets>
</assembly>
你需要在你的pom中使用它:
<plugin>
<artifactId>maven-assembly-plugin</artifactId>
<configuration>
<appendAssemblyId>true</appendAssemblyId>
<descriptors>
<descriptor>src/main/resources/whatever-you-name-the-snippet-above.xml</descriptor>
</descriptors>
</configuration>
</plugin>
这是一个重要的部分:
<appendAssemblyId>true</appendAssemblyId>
如果没有它,如果你运行mvn assembly:assembly
,你的自定义程序集将被覆盖。
答案 1 :(得分:1)
一种可能性是从程序集创建中明确排除相关文件。
<dependencySet>
<outputDirectory>/</outputDirectory>
<includes>
<include>${project.groupId}:Project2</include>
</includes>
<unpack>true</unpack>
<unpackOptions>
<excludes>
<exclude>**/log4j.xml</exclude>
</excludes>
</unpackOptions>
</dependencySet>