2009-12-13 22 views

回答

18

你要存档的名称叫做超级罐子。这个模块必须有你想打包成一个jar的所有其他子模块的依赖关系。如果你创建了另一个产生所需工件的子模块,它可以在所有它的依赖关系中构建在reactor中,但是如果它是一个单独的项目,你必须安装所有的uber jar依赖。

| parent 
| -- submodule1 
... 
| -- submoduleN 
| -- uberjarSubmodule 

尤伯杯罐子可以用做:

  1. maven-shade-plugin - 在你的情况,你一定要记住,从你的模块

    <project> 
    ... 
    <build> 
    <plugins> 
        <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-shade-plugin</artifactId> 
        <version>1.2.2</version> 
        <executions> 
         <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>shade</goal> 
         </goals> 
         <configuration> 
          <artifactSet> 
          <excludes> 
           <exclude>classworlds:classworlds</exclude> 
           <exclude>junit:junit</exclude> 
           <exclude>jmock:jmock</exclude> 
           <exclude>xml-apis:xml-apis</exclude> 
          </excludes> 
          </artifactSet> 
         </configuration> 
         </execution> 
        </executions> 
        </plugin> 
    </plugins> 
    </build> 
    ... 
    </project> 
    
  2. maven-assembly-plugin排除传递依赖条件 - 在this问题你会发现一个详细的答案

+0

阴影看起来像一个很酷的插件。 – Clinton 2009-12-13 10:42:22

1

如果你的jar是一个你希望其他开发者通过maven下载和使用的库,取决于你如何发布这个。您应该在项目pom中将这些指定为dependencies

如果您尝试将某些东西发送给只想抓取二进制文件并使用您的项目的最终用户,则可以尝试使用assembly插件打包项目。有了这个插件,你可以在它的依赖包旁边打包一个jar。它不会把它全部放在一个jar文件中,但假设你正确配置了用户类路径,它应该没有关系。

相关问题