我使用maven-assembly-plugin和“jar-with-dependencies”来打包jar。有2个依赖关系工件具有log-back.xml。第二件神器取决于第一件。我希望在最终的jar中有第二个工件的log-back.xml,但它总是包含第一个工件的log-back.xml。那我该如何控制呢?使用maven程序集插件覆盖资源文件
谢谢
我使用maven-assembly-plugin和“jar-with-dependencies”来打包jar。有2个依赖关系工件具有log-back.xml。第二件神器取决于第一件。我希望在最终的jar中有第二个工件的log-back.xml,但它总是包含第一个工件的log-back.xml。那我该如何控制呢?使用maven程序集插件覆盖资源文件
谢谢
第一个神器是你自己项目的模块吗?如果是这样,您可以在pom.xml的资源部分中排除log-back.xml。
<resources>
<resource>
<directory>src/main/resources</directory>
<excludes>
<exclude>log-back.xml</exclude>
</excludes>
</resource>
...
</resources>
但是,如果当它是建立了整个罐子的范围,这个模块本身并不需要的日志back.xml这仅适用。
不幸的是,我无法改变第一件神器。 – 2011-05-17 07:29:29
哦,好吧,那我想这会很困难。 据我所知,只能排除依赖关系的传递依赖关系,而不能排除依赖关系中包含的内容。 – Frank 2011-05-17 08:09:38
您可以使用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的组装插件的最新版本: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 /主/资源”)
:与“过滤”文件集在我的组件描述符设置好的为“true”您可以使用反引号'在答案中将事物标记为'code',例如那么文件名就会更可读。 – noongiya95 2017-07-27 10:57:00
这是一个特定案例的答案http://stackoverflow.com/a/24578209/1531945一般来说,操作'dependencySets'和'unpackOptions'应该能够解决问题。 – 2016-10-31 15:52:14