如何让Maven为同一个项目生产两个罐子?

时间:2013-05-03 20:30:37

标签: maven

我担心答案很可能是“拆分项目”,但这里有......

我有一个项目,我现在需要输出一个版本的jar文件,而不用一个log4j.xml配置。我觉得如果我有双输出会很好:一个带有log4j.xml的jar和一个没有log4j.xml的重复jar。我讨厌将项目拆分为一个文件。我已经尝试过Assembly插件,但我认为我还没有找到正确的配置。

4 个答案:

答案 0 :(得分:2)

此关系中的最佳解决方案是不使用配置文件因为配置文件强制您使用激活的配置文件第二次运行您的构建,如果您想使用发布插件等,这将无效。最简单的解决方案是使用这样的分类器:

  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <version>2.4</version>
        <executions>
          <execution>
            <id>second-jar</id>
            <goals>
              <goal>jar</goal>
            </goals>
            <configuration>
              <classifier>without</classifier>
              <excludes>
                <exclude>**/log4j*</exclude>
              </excludes>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>

绑定到包阶段的默认绑定maven-jar-plugin将创建包含log4j.xml文件的jar,上面将创建没有log4j.xml文件的jar文件,可以通过使用分类器没有或者您为其命名。

这样做的好处是,你可以通过单次调用maven来创建两个jar:

mvn clean package

此外,它们将附加到项目中,并将部署到相应的存储库中。

答案 1 :(得分:0)

是的,您可以从单个Maven项目创建多个JAR。可以使用工件的分类器来区分它们。

Maven工件由以下部分组成:

  • 的groupId
  • 的artifactId
  • 版本
  • 分类

默认情况下,分类器为空,但在使用maven-assembly-plugin排除log4j.xml文件时,可以将其设置为“nolog4j”。

答案 2 :(得分:0)

我会使用个人资料。创建默认配置文件和不带log4j.xml的配置文件。调用mvn包&amp;&amp; mvn包-P otherprofile。

答案 3 :(得分:0)

您可以在第二个配置文件上配置maven jar plugin,如下所示:

<profiles>
 <profile>
  <id>nolog4j<id>
   <build>
    <plugin>
     <groupId>org.apache.maven.plugins</groupId>
     <artifactId>maven-jar-plugin</artifactId>
     <version>2.4</version>
     <configuration>
      <excludes>
        <exclude>log4j.xml</exclude>
      </excludes>
    </configuration>
  </plugin>
 </build>
</profile>
</profiles>

然后你可以运行mvn package -P nolog4j它应该创建相同的jar但没有log4j.xml文件(将exclude标记调整为实际的文件路径) 有关详情,请访问maven jar plugin

相关问题