我使用带有“jar-with-dependencies”的 maven-assembly-plugin 来打包 jar。有 2 个具有 log-back.xml 的依赖项工件。第二个工件取决于第一个工件。我想在最终的 jar 中包含第二个工件的 log-back.xml,但它总是包含第一个工件的 log-back.xml。那么我该如何控制呢?
谢谢
我使用带有“jar-with-dependencies”的 maven-assembly-plugin 来打包 jar。有 2 个具有 log-back.xml 的依赖项工件。第二个工件取决于第一个工件。我想在最终的 jar 中包含第二个工件的 log-back.xml,但它总是包含第一个工件的 log-back.xml。那么我该如何控制呢?
谢谢
您可以使用unpackOptions来实现此目的。尝试以下操作:
<assembly>
...
<dependencySets>
<dependencySet>
<outputDirectory>/</outputDirectory>
<includes>
<include>${groupId}:${artifact.whose.logback.is.to.be.excluded} </include>
</includes>
<unpack>true</unpack>
<unpackOptions>
<excludes>
<exclude>**/logback.xml</exclude>
</excludes>
</unpackOptions>
</dependencySet>
<dependencySet>
<outputDirectory>/</outputDirectory>
<excludes>
<exclude>${groupId}:${artifact.whose.logback.is.to.be.excluded}</exclude>
</excludes>
<unpack>true</unpack>
</dependencySet>
</dependencySets>
</assembly>
(此时使用 maven-assembly-plugin 的最新版本:3.0.0)
我在组装构建时遇到了同样的问题。
我有两个具有相同属性文件但内容不同的依赖项(一个很好,另一个用缺少的声明覆盖了第一个)。
问题是我终于用错误的配置文件替换了我的程序集 jar 中的另一个。
我发现覆盖文件的唯一最干净的解决方案是:
1 - 在我的项目中添加我想为构建保留的好文件:例如:src/main/resources/META-INF/services/myfileWhichOverwriteTheBadDependenciesRessources.xml
2 - 在我的程序集描述符中添加一个“过滤”设置为“真”的文件集:
<fileSet>
<directory>${project.main.resources}/META-INF</directory>
<outputDirectory>META-INF</outputDirectory>
<filtered>true</filtered>
</fileSet>
(在我的情况下,“project.main.resource”属性设置为“src/main/resources”)
第一个工件是您自己项目的模块吗?如果是这样,您可以在 pom.xml 的资源部分中排除 log-back.xml。
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>log-back.xml</exclude>
</excludes>
</resource>
...
</resources>
但是,只有当这个模块在整个 jar 的范围之外构建时,它本身不需要 log-back.xml 时,这才有效。