Различные файлы MANIFEST.MF для jar-файла и tests.jar по умолчанию - PullRequest
2 голосов
/ 21 ноября 2011

Я пытаюсь создать разные MANIFEST.MF файлы для jar-упакованных артефактов и test-jar-packaged.maven-jar-plugin используется для добавления дополнительных вещей в MANIFEST.MF - это прекрасно работает до сих пор.Но если я хотел бы выбрать другой файл шаблона для MANIFEST.MF для тестового проекта, Maven использует только второй шаблон, на который ссылаются, для обоих артефактов ...

Как заставить Maven использовать PROD-MANIFEST.MF-templateдля обычной фляги и TEST-MANIFEST.MF-template для тест-фляги?

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

1 голос
/ 25 февраля 2012

Попробуйте это:

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

Эта конфигурация выполняет 2 разных исполнения одного и того же плагина, каждый из которых имеет свою собственную конфигурацию архива.

Если где-то в вашей иерархии есть родительский 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">

как описано в разделе плагинов справочника POM .

1 голос
/ 21 ноября 2011

Оберните каждую конфигурацию плагина, которую вы указали в профиле.

<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

Надеюсь, что это поможет.

...