2011-10-06 54 views
1

我知道使用Maven的用户不应该关心依赖关系,因为Maven会按照pom中的规定下载它们。不过,我想分发另一个jar给非maven用户。所以我仍然想为Maven生成原始的jar,在那里没有问题。但我也希望能够生成另一个jar包含一些依赖关系。通过一些依赖关系,我的意思是我将选择pom.xml中定义的一些依赖项,并将它们包含在我将分发自己的其他jar中。除了主要的artifact jar之外,还可以生成另外一个jar,并且有一些依赖关系,不是全部,用于在Maven之外分发

假设我在我的pom.xml中有10个依赖关系。 dep1.jar,dep2.jar,...,dep10.jar。

当然,生成用MAVEN分发的主jar不会有任何这些依赖关系。但我希望能够以dep3.jar和dep4.jar包含的方式生成另一个jar。

任何帮助将不胜感激!

编辑:指示我一个maven插件没有帮助。但给我一个pom.xml的例子呢。 :)

回答

2

看看maven-assembly-plugin。您可以对其进行配置,以创建一个包含项目所有依赖关系以及项目源代码的JAR。然后,您可以将插件的执行绑定到包阶段,以便将此超级容器构建为常规生命周期的一部分。

+0

任何有关如何使用maven-assembly-plugin的帮助将非常感谢。文档没有帮助。我如何配置它来做到这一点,然后绑定到包装阶段? – chrisapotek

+0

http://maven.apache.org/plugins/maven-assembly-plugin/descriptor-refs.html#jar-with-dependencies并将插件的目标绑定到生命周期阶段,您添加一个“'元素http ://maven.apache.org/guides/introduction/introduction-to-the-lifecycle.html#Plugins –

0

@matt b已经回答了这个问题,但是因为你想要代码片断,这是做到这一点的一种方法。

创建一个文件,说assemblyDescriptor.xmlsrc/main/assembly文件夹,如下所示:

<assembly> 
    <id>distribution</id> 
    <formats> 
     <format>zip</format> 
    </formats> 
    <dependencySets> 
     <dependencySet> 
      <outputDirectory>/my-distribution</outputDirectory> 
      <includes> 
       <include>group3:dep3</include> 
       <include>group6:dep6</include> 
       ... 
      </includes> 
      <unpack>true</unpack> 
     </dependencySet> 
    </dependencySets> 
</assembly> 

指定以下插件在你的POM,如果<profile>部分有条件的调用中必需的。

   <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-assembly-plugin</artifactId> 
        <version>2.2.1</version> 
        <executions> 
         <execution> 
          <phase>package</phase> 
          <goals> 
           <goal>single</goal> 
          </goals> 
         </execution> 
        </executions> 
        <configuration> 
         <descriptors> 
          <descriptor>src/main/assembly/assemblyDescriptor.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </plugin> 

运行mvn packagemvn install,寻找除了项目JAR的zip文件。

+0

你如何包括所有的罐子? – jayunit100

+0

@ jayunit100。你应该阅读文档,而不是期望被勺子喂食。除非您指定'includes'或'excludes',否则默认情况下'dependencySet'包含** all **依赖项 – Raghuram

相关问题