2

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

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

4

4 回答 4

4

这种关系中最好的解决方案是不要使用配置文件,因为配置文件会强制您使用激活的配置文件再次运行构建,如果您喜欢使用发布插件等,这将不起作用。最简单的解决方案是使用这样的分类器:

  <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>

绑定到 package 阶段的默认绑定 maven-jar-plugin 将创建包含 log4j.xml 文件的 jar 文件,上面将创建没有 log4j.xml 文件的 jar 文件,可以使用没有或的分类器访问但是你的名字。

这样做的好处是您可以通过一次调用 maven 来创建两个 jar,例如:

mvn clean package

它们也将附加到项目中,并将部署到适当的存储库。

于 2013-05-04T09:08:18.537 回答
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 插件

于 2013-05-03T21:09:42.480 回答
0

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

Maven 工件由以下部分组成:

  • 组 ID
  • 工件 ID
  • 版本
  • 分类器

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

于 2013-05-03T20:52:59.237 回答
0

我会使用配置文件。创建一个默认配置文件和一个没有 log4j.xml 的配置文件。调用 mvn package && mvn package -P otherprofile。

于 2013-05-03T20:53:19.177 回答