Разрабатывание того же проекта в Знатоке с другим artifactid (на основе используемого JDK)

У меня есть сценарий, где мой проект должен быть скомпилирован в другом JDKs, и получающееся имя артефакта должно отличаться на основе используемого JDK. Например, если названием проекта является MyProject, и я называю установку mvn затем, это должно быть скомпилировано в JDK 1.4, а также JDK 1.5, и наконец я получаю две банки того же проекта (MyProjectJDK14-1.0 и MyProjectJDK15-1.0). Возможно достигнуть этого?

21
задан Manoj 22 June 2010 в 10:47
поделиться

3 ответа

В Maven для этого не нужно менять finalName артефакта, а нужно использовать классификатор. Например:

<project>
  ...
  <build>
    <plugins>
      <plugin>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
          <classifier>${envClassifier}</classifier>
        </configuration>
      </plugin>
    </plugins>
  </build>
  ...
  <profiles>
    <profile>
      <id>jdk16</id>
      <activation>
        <jdk>1.6</jdk>
      </activation>
      <properties>
        <envClassifier>jdk16</envClassifier>
      </properties>
    </profile>
    <profile>
      <id>jdk15</id>
      <activation>
        <jdk>1.5</jdk>
      </activation>
      <properties>
        <envClassifier>jdk15</envClassifier>
      </properties>
    </profile>
  </profiles>
</project>

Артефакт JAR будет назван ${finalName}-${envClassifier}.jar и включен в качестве зависимости с использованием следующего синтаксиса:

<dependency>
  <groupId>com.mycompany</groupId>
  <artifactId>my-project</artifactId>
  <version>1.0</version>
  <classifier>jdk16</classifier>
</dependency>

Вам придется вызвать сборку Maven дважды, чтобы получить оба банка (приличный механизм CI может это сделать).

35
ответ дан 29 November 2019 в 20:21
поделиться

Что вы можете сделать, так это определить два профиля, по одному на каждый используемый JDK. Каждый профиль будет активирован в зависимости от того, какой JDK используется:

<profiles>
    <profile>
        <id>profile-for-jdk1.4</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <jdk>1.4</jdk>
        </activation>
        <build>
            <finalName>myBuild-jdk1.4</finalName>
        </build>
    </profile>
    <profile>
        <id>profile-for-jdk1.5</id>
        <activation>
            <activeByDefault>false</activeByDefault>
            <jdk>1.5</jdk>
        </activation>
        <build>
            <finalName>myBuild-jdk1.5</finalName>
        </build>
    </profile>
</profiles>

Затем в каждом профиле вы определяете определенное , которое будет использоваться для названия сгенерированного JAR-файла.

Таким образом, если вы собираете свое приложение, используя JDK 1.4, сгенерированный JAR будет называться myBuild-jdk1.4.jar.

Если ваш конечный пакет собирается с использованием сборки, вы можете просто изменить блок внутри профилей для настройки плагина сборки (например, на ).


По поводу вашего комментария: Действительно, эта процедура потребует двух отдельных сборок на Maven, так как вам придется перекомпилировать весь проект при смене версии JDK. Одна из конвенций Maven2 заключается в том, что один проект = один артефакт. Вы же хотите иметь один проект с двумя артефактами.

В конечном итоге, одним из решений является использование Hudson для сборки приложения, и особенно матричной функции этого инструмента, которая позволяет запускать несколько сборок с различными параметрами, в вашем случае JDK.

7
ответ дан 29 November 2019 в 20:21
поделиться

Использовать профили Maven. Добавьте этот раздел в тег project вашего pom.xml:

<profiles>
  <profile>
    <activation>
      <jdk>1.4</jdk>
    </activation>
    <build>
       <finalName>${project.artifactId}-${project.version}-JDK1.4</finalName>
    </build>
  </profile>
  <profile>
    <activation>
      <jdk>1.5</jdk>
    </activation>
    <build>
       <finalName>${project.artifactId}-${project.version}-JDK1.5</finalName>
    </build>
  </profile>
</profiles>

Смотрите this, чтобы узнать больше о профилях.

2
ответ дан 29 November 2019 в 20:21
поделиться
Другие вопросы по тегам:

Похожие вопросы: