默认jar文件和tests.jar的不同MANIFEST.MF

时间:2011-11-21 16:49:49

标签: java maven package manifest.mf maven-jar-plugin

我正在尝试为jar打包的工件和test-jar-packaged创建不同的MANIFEST.MF文件。 maven-jar-plugin用于向MANIFEST.MF添加其他内容 - 到目前为止完美无缺。但是如果我想为testproject的MANIFEST.MF选择不同的模板文件,Maven只会为这两个工件使用第二个引用的模板......

如何让Maven使用PROD-MANIFEST.MF-template进行常规jar包装,TEST-MANIFEST.MF-template进行test-jar-packaging?

<plugins>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
            <execution>
                <id>test-manifest-mf</id>
                <phase>package</phase>
                <goals>
                    <goal>test-jar</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                </manifest>
                <manifestFile>foo/TEST-MANIFEST.MF</manifestFile>
            </archive>
        </configuration>
    </plugin>

    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <executions>
            <execution>
                <id>default-manifest-mf</id>
                <phase>package</phase>
                <goals>
                    <goal>jar</goal>
                </goals>
            </execution>
        </executions>
        <configuration>
            <archive>
                <manifest>
                    <addClasspath>true</addClasspath>
                </manifest>
                <manifestFile>foo/PROD-MANIFEST.MF</manifestFile>
            </archive>
        </configuration>
    </plugin>

2 个答案:

答案 0 :(得分:1)

包装您在个人资料中提供的每个插件配置。

<profiles>
  <profile>
    <id>PROD</id>
    <build>
      <plugins>
        // your PROD plugin configuration
      </plugins>
    </build>
  </profile>
  <profile>
    <id>TEST</id>
    <build>
      <plugins>
        // your TEST plugin configuration
      </plugins>
    </build>
  </profile>
</profiles>

然后使用个人资料

调用Maven
mvn package -P PROD

希望有所帮助。

答案 1 :(得分:1)

试试这个:

<plugins>
  <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
      <execution>
        <id>test-manifest-mf</id>
        <phase>package</phase>
        <goals>
            <goal>test-jar</goal>
        </goals>
        <configuration>
          <archive>
            <manifest>
                <addClasspath>true</addClasspath>
            </manifest>
            <manifestFile>foo/TEST-MANIFEST.MF</manifestFile>
          </archive>
        </configuration>
      </execution>

      <execution>
        <id>default-manifest-mf</id>
        <phase>package</phase>
        <goals>
            <goal>jar</goal>
        </goals>
        <configuration>
          <archive>
            <manifest>
              <addClasspath>true</addClasspath>
            </manifest>
            <manifestFile>foo/PROD-MANIFEST.MF</manifestFile>
          </archive>
        </configuration>
      </execution>
    </executions>
  </plugin>
</plugins>

此配置执行同一插件的两种不同执行,每种插件都有自己的存档配置。

如果层次结构中的某个父pom在执行之外配置了存档,则如下所示:

<plugin>
  <groupId>org.apache.maven.plugins</groupId>
  <artifactId>maven-jar-plugin</artifactId>
  <configuration>
    <archive>
       ... other archive config ...
    </archive>
  </configuration>
</plugin>

然后该配置将默认与您拥有的配置合并。如果您不希望这种情况发生,请将combine.self属性添加到<archive>元素,如下所示:

<archive combine.self="override">

plugins section of the POM reference

中所述