2011-05-17 83 views
6

我使用maven-assembly-plugin和“jar-with-dependencies”来打包jar。有2个依赖关系工件具有log-back.xml。第二件神器取决于第一件。我希望在最终的jar中有第二个工件的log-back.xml,但它总是包含第一个工件的log-back.xml。那我该如何控制呢?使用maven程序集插件覆盖资源文件

谢谢

+0

这是一个特定案例的答案http://stackoverflow.com/a/24578209/1531945一般来说,操作'dependencySets'和'unpackOptions'应该能够解决问题。 – 2016-10-31 15:52:14

回答

1

第一个神器是你自己项目的模块吗?如果是这样,您可以在pom.xml的资源部分中排除log-back.xml。

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

但是,如果当它是建立了整个罐子的范围,这个模块本身并不需要的日志back.xml这仅适用。

+0

不幸的是,我无法改变第一件神器。 – 2011-05-17 07:29:29

+0

哦,好吧,那我想这会很困难。 据我所知,只能排除依赖关系的传递依赖关系,而不能排除依赖关系中包含的内容。 – Frank 2011-05-17 08:09:38

5

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

我明白了你的想法,但它不起作用。最终的jar中不包含logback.xml。也许,插件扩展了罐子,然后使用筛选器(不包括logb​​ack.xml)将它们打包到 – 2011-05-19 04:09:06

+0

它对我来说很有用。海,你必须做错事。 – art1go 2012-01-17 14:40:58

+1

编辑assembly.xml后,这只适用于我的第一个版本。如果我再次运行构建,它将停止工作。似乎资源复制的顺序是未定义的,因此不能保证这会起作用。 – thegeko 2015-10-05 09:29:02

0

(在这个时候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”
+0

您可以使用反引号'在答案中将事物标记为'code',例如那么文件名就会更可读。 – noongiya95 2017-07-27 10:57:00