我的项目使用许多程序集,因此我只对程序集感兴趣。在执行mvn安装时,除了程序集之外,我将获得默认打包的.jar。我怎么才能避免这种情况?
我有一个与你提供的类似的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> 如何避免这个快照(不确定确切的术语) jar,并确保只创建程序集?
发布于 2009-09-09 07:20:47
我可以用两种方式阅读你的问题,我已经概述了下面两个问题的答案。如果两者都不正确的话,你能不能多解释一下你的问题呢?
1)您是否意味着您有一个带有默认( jar )打包的项目,并且希望在没有定义程序集时避免创建jar?如果是这样的话,如果没有定义程序集,那么构建实现了什么?
2)您是否意味着您正在运行mvn程序集:程序集以生成程序集,并希望知道如何在运行安装目标时获得该程序集?
对于选项2,可以将程序集插件绑定到生命周期阶段,以确保它始终运行,如果指定为false,则程序集将替换默认的jar。
例如,此配置将在打包阶段调用程序集插件,并替换默认的jar:
<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生命周期的执行来配置项目。您需要配置的生命周期绑定在构建生命周期简介中列出
发布于 2009-09-09 08:34:14
我不确定你能不能用一种非常简单的方式去做。
一种解决方案是在构建完成后调用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>
...发布于 2009-09-15 18:04:03
我认为,如果您向我们展示您的整个POM和正在构建的工件,将会更加清楚。我只能猜测问题是什么,因为你的术语不是我所熟悉的。这是我对这个问题的猜测:您已经将POM配置为生成两个程序集JAR,但是您得到了POM本身的第三个JAR。换句话说,如果POM的artifactId是MyApp,那么除了实际需要的两个JAR之外,您还可以得到一个MyApp-1.0.jar或类似的JAR。
如果是这样的话,问题归结为您正在使用Maven从单个模块创建多个工件。Maven被设计为只从每个模块产生一个主要工件。我要做的是更改POM,使其具有一个打包类型的"pom“,并在一个名为<modules>和App2的App1部分中给它两个模块。在您的模块下创建子目录,每个应用程序一个子目录。为每个程序集配置一个POM,其中包含一个打包类型的"jar“。将代码/文件/等适当地移动到每个子模块中,这样父模块中就不会有任何剩余。
使用Maven时,如果您发现自己从一个模块生成了两个工件(您就是这样),那么您应该首先考虑您可能违反了Maven最佳实践并重新安排了一些事情,因此每个模块只生成一个工件。
如果这没有意义,请告诉我,我会尽量澄清。
https://stackoverflow.com/questions/1397593
复制相似问题