使用maven程序集插件覆盖资源文件

时间:2011-05-17 07:18:47

标签: java resources maven maven-assembly-plugin overwrite

我使用maven-assembly-plugin和“jar-with-dependencies”打包jar。有2个依赖项工件有log-back.xml。第二个工件取决于第一个工件。我希望在最终jar中有第二个工件的log-back.xml,但它总是包含第一个工件的log-back.xml。那么我该如何控制呢?

由于

3 个答案:

答案 0 :(得分:6)

您可以使用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>

答案 1 :(得分:1)

第一件工件是您自己项目的模块吗?如果是这样,您可以在pom.xml的resources部分中排除log-back.xml。

<resources>
  <resource>
    <directory>src/main/resources</directory>
    <excludes>
      <exclude>log-back.xml</exclude>
    </excludes>
  </resource>
  ...
</resources>

但是,只有当该模块在整个jar的范围之外构建时,它才能自行使用log-back.xml。

答案 2 :(得分:1)

(目前使用maven-assembly-plugin的最新版本:3.0.0)

我在程序集构建时遇到了同样的问题。

我有相同属性文件的两个依赖项,但内容不同(一个好,另一个覆盖第一个缺少声明)。

问题是我终于将错误的配置文件替换为我的程序集jar中的另一个。

我发现覆盖文件的唯一最干净的解决方案是:

1 - 在我的项目中添加我想要保留的好文件: 例如:src/main/resources/META-INF/services/myfileWhichOverwriteTheBadDependenciesRessources.xml

2 - 添加一个文件集&#39;过滤&#39;设定为&#39; true&#39;在我的汇编描述符中:

    <fileSet>
        <directory>${project.main.resources}/META-INF</directory>
        <outputDirectory>META-INF</outputDirectory>
        <filtered>true</filtered>
    </fileSet>

(&#39; project.main.resource&#39;属性设置为&#39; src / main / resources&#39;在我的情况下)