2016-02-22 14 views
1

我想使用Maven阴影创建阴影罐,但我还想仅在阴影罐的情况下包含特殊依赖项(不在正常的编译依赖项中我的项目)。我怎么去解决这个问题?Maven仅在阴影罐中包含依赖项

从我的理解,包括/排除只是白名单/黑名单,所以我不能明确强制某些东西被包含在实际的依赖列表中。

对于更多的上下文,我有一个JAR依赖关系,其中包含一个资源,我只想包含在我的一个阴影工件中,但是在类路径中包含该jar会导致错误。

要清楚,我正在寻找在一个mvn package调用中生成带有附加依赖项的阴影jar和没有它的普通jar。

+0

然后修复你的错误。老实说,越简单越好。使用配置文件将起作用,但它会使所有事情都比需要的更复杂。避免解决方法。让你的生活变得轻松。 – Tunaki

+0

这不是你可以“修复”的东西。这两个罐子内含有固有的互斥配置。其中一个要发布的二进制文件需要特定的配置,另一个需要另一个。配置文件是解决方案,而不是解决方法。 –

回答

2

尝试使用配置文件,并且仅在该配置文件中拥有依赖性和阴影。例如:

<profiles> 
    <profile> 
     <id>shadeProfile</id> 
     <dependencies> 
      <dependency> 
       <groupId>com.example</groupId> 
       <artifactId>some-artifact</artifactId> 
       <version>1.23</version> 
      </dependency> 
     </dependencies> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
        <version>2.3</version> 
        <executions> 
         <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>shade</goal> 
          </goals> 
          <configuration> 
           <shadedClassifierName>shaded</shadedClassifierName> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

现在,当您运行mvn -PshadeProfile package它将包括神器为你的阴影构建的一部分,并使用分类shaded新神器。通过这种方式,只需打开配置文件,您的构建就可以在没有问题资源的情况下生成未着色的JAR,并使用该资源生成带阴影的JAR。

依赖于此的其他项目可以根据需要依赖阴影或无阴影的工件,因为您正在使用分类器来生成两者。

+0

谢谢,这几乎是我正在寻找的东西,但是有可能始终生成着色的工件,以及未着色的工件,并使阴影的工件成为唯一包含该依赖工件的工件。即。有两个配置文件(默认+阴影),这两个配置文件总是得到执行? –

+0

上述问题的解决方案是使用配置文件并将其设置为activeByDefault = true。谢谢! –

+0

很高兴听到你想出了那部分 - 不知道我会认为这将工作。我必须记住...... – dcsohl