2009-09-09 80 views
1

我的项目使用了很多程序集,因此我只对程序集感兴趣。 在执行mvn install与assembly之外,我得到默认的打包.jar。 我该如何避免这种情况?Maven-2:避免默认打包?


我有一个类似于你所提供的pom.xml。 上执行MVN安装,我越来越App1.jar,App2.jar,以及包含快照JAR中的所有内容

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-assembly-plugin</artifactId> 
      <version>2.2-beta-2</version> 
      <executions> 
       <execution> 
        <id>assemblyone</id> 
        <phase>compile</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <finalName>App1</finalName> 
         <appendAssemblyId>false</appendAssemblyId> 
         <descriptors> 
          <descriptor>${basedir}/src/main/resources/assemblies/report.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
       <execution> 
        <id>assemblytwo</id> 
        <phase>compile</phase> 
        <goals> 
         <goal>single</goal> 
        </goals> 
        <configuration> 
         <finalName>App2</finalName> 
         <appendAssemblyId>false</appendAssemblyId> 
         <descriptors> 
          <descriptor>${basedir}/src/main/resources/assemblies/src.xml</descriptor> 
         </descriptors> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

我怎样才能避免这种快照(不知道确切的术语)的容器,并确保只有组件创建?

回答

2

我可以用两种方法来阅读你的问题,我已经在下面概述了答案。如果两者都不正确,请问您是否可以修改您的问题。

1)你的意思是你有一个默认(jar)包装的项目,并且你想避免在没有定义组件时创建jar吗?如果是这种情况,如果没有定义组件,构建会达到什么效果?

2)您是否意味着您正在运行mvn assembly:assembly来生成程序集并想知道如何在运行安装目标时获取该程序集?


对于第二种情况,可以在组装插件绑定到一个生命周期阶段,以确保它始终运行,如果指定<appendAssemblyId>应该是假的,那么组件将取代默认的罐子。

例如,这种配置将调用在包装阶段的组装插件和替换默认罐子:

<plugin> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-2</version> 
    <executions> 
    <execution> 
     <phase>package</phase> 
     <goals> 
     <goal>single</goal> 
     </goals> 
     <configuration> 
     <appendAssemblyId>false</appendAssemblyId> 
     <descriptors> 
      <descriptor>src/main/assembly/archive.xml</descriptor> 
     </descriptors> 
     </configuration> 
    </execution> 
    </executions> 
</plugin>  

有关选项1,这实际上是相当棘手的事情。我能想到的最好的方法是指定项目使用pom打包,并使用通常绑定到jar生命周期的执行来配置项目profile。您需要配置的生命周期绑定列在introduction to the build lifecycle

0

我不确定您是否真的可以通过非常简单的方式实现该功能。

一种解决方法是调用clean插件一旦构建实现,通过这样做:

<build> 
    <plugins> 
     <plugin> 
      <artifactId>maven-clean-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>auto-clean</id> 
        <phase>package</phase> 
        <goals> 
         <goal>clean</goal> 
        </goals> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
    ... 
</build> 

这样,在target/目录中创建的JAR将在Maven2的执行结束时被删除。

但是,您将不得不定义另一个目录来存储由Maven2创建的程序集。否则,它将被clean插件的调用来删除...如果你想将它们存储在目录assemblies-target/,您可以添加在pom.xml文件:

<plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-assembly-plugin</artifactId> 
    <version>2.2-beta-4</version> 
    <configuration> 
     ... 
     <!-- Copy the ZIP in target/ of the ROOT directory. --> 
     <outputDirectory>assemblies-target</outputDirectory> 
    </configuration> 
    ... 
0

我认为这将是更如果您向我们展示了您的整个POM和正在构建的工件,请清楚。我只能猜测问题是什么,因为你的术语不是我所熟悉的。这是我对这个问题的猜测:你有一个配置好的POM来生成两个程序集JAR,但是你得到了POM本身的第三个JAR。换句话说,如果您的POM的artifactId是MyApp,那么除了您实际需要的两个JAR之外,您还将获得MyApp-1.0.0.jar或类似的内容。

如果是这样,问题归结为您正在使用Maven从单个模块创建多个工件。 Maven被设计为从每个模块中只产生一个主要的工件。我会做的是将您的POM更改为包装类型为“pom”,并在名为App1和App2的<modules>部分中给它两个模块。在你的模块下创建子目录,每个应用程序一个。给他们每个POM配置一个单一的装配,包装类型的“罐子”。移动代码/文件/等。适当地放入每个子模块中,这样就不会有任何剩余的父模块。使用Maven,如果你发现自己从一个模块(你是)生成两个工件,你应该首先考虑你可能违反了Maven的最佳实践并重新安排了一些东西,这样你只能为每个模块生成一个工件。

请让我知道如果这没有意义,我会尽力澄清。

+0

嗨 感谢您的inputs.i不认为我能够创建单独的模块说App1,App2..bcoz我的程序集罐子,即App1.jar,App2.jar有共同的文件被包括在内。 如果我将packagins指定为'pom',MyApp-1.0.0 jar将不会被创建? – user170114 2009-09-16 11:22:10

+0

那么,那些常见的文件将被放置在第三个位置,或者在它们自己的组件中被解压到每个模块中,或者被放在父模块中并且被每个孩子引用(不那么干净)。标记你的父模块一个“POM”不会创建JAR,但是,你仍然会违反Maven的原则而没有按照我的建议去做。搜索“Maven:权威指南” - 一本关于Maven的免费书籍。 – SingleShot 2009-09-16 16:30:22

+0

谢谢..我想我需要去选择将这些常用软件包放入父母并从孩子访问。 在这种情况下,我应该在哪里保留我的程序集描述符?在父/子程序集下?如何指向父文件夹..我不能使用-project.build.outputDirectory对吗? – user170114 2009-09-17 05:51:02