首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Maven-2:避免默认打包?

Maven-2:避免默认打包?
EN

Stack Overflow用户
提问于 2009-09-09 04:53:49
回答 3查看 2.7K关注 0票数 1

我的项目使用许多程序集,因此我只对程序集感兴趣。在执行mvn安装时,除了程序集之外,我将获得默认打包的.jar。我怎么才能避免这种情况?

我有一个与你提供的类似的pom.xml。在执行mvn安装时,我将获得App1.jar、App2.jar和快照jar,其中包含所有内容

代码语言:javascript
复制
<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,并确保只创建程序集?

EN

回答 3

Stack Overflow用户

发布于 2009-09-09 07:20:47

我可以用两种方式阅读你的问题,我已经概述了下面两个问题的答案。如果两者都不正确的话,你能不能多解释一下你的问题呢?

1)您是否意味着您有一个带有默认( jar )打包的项目,并且希望在没有定义程序集时避免创建jar?如果是这样的话,如果没有定义程序集,那么构建实现了什么?

2)您是否意味着您正在运行mvn程序集:程序集以生成程序集,并希望知道如何在运行安装目标时获得该程序集?

对于选项2,可以将程序集插件绑定到生命周期阶段,以确保它始终运行,如果指定为false,则程序集将替换默认的jar。

例如,此配置将在打包阶段调用程序集插件,并替换默认的jar:

代码语言:javascript
复制
<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生命周期的执行来配置项目。您需要配置的生命周期绑定在构建生命周期简介中列出

票数 2
EN

Stack Overflow用户

发布于 2009-09-09 08:34:14

我不确定你能不能用一种非常简单的方式去做。

一种解决方案是在构建完成后调用clean插件,方法是:

代码语言:javascript
复制
<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文件中:

代码语言:javascript
复制
<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
EN

Stack Overflow用户

发布于 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最佳实践并重新安排了一些事情,因此每个模块只生成一个工件。

如果这没有意义,请告诉我,我会尽量澄清。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/1397593

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档