Зависимость проекта Maven от версии JDK - PullRequest
7 голосов
/ 02 апреля 2010

У меня есть проекты, которые должны быть собраны с определенной версией JDK.

Проблема не в исходных и целевых параметрах, а в банках среды выполнения, используемой во время компиляции. В некоторых случаях я получаю ошибку компиляции, если я пытаюсь скомпилировать с неправильным JDK, но иногда сборка проходит успешно, и я получаю ошибки времени выполнения при использовании jar-файлов.

Например, в eclipse у меня есть возможность установить среду выполнения для проекта в файле .classpath.

Есть ли способ справиться с такой ситуацией в Maven?

Я хотел бы иметь возможность обрабатывать зависимости JRE, как и другие зависимости проекта в файле POM.

UPDATE:

Принятое решение было лучшим, когда я задал этот вопрос, поэтому я не буду его менять. Тем временем было введено новое решение для такого рода проблем: Maven Toolchain . Для более подробной информации перейдите по ссылке.

Ответы [ 3 ]

2 голосов
/ 02 апреля 2010

У меня есть проекты, которые должны быть собраны с определенной версией JDK.

Вы можете использовать плагин Maven Enforcer для принудительного использования определенной версии JDK:

<project>
  [...]
  <build>
   <plugins>
     <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-enforcer-plugin</artifactId>
        <executions>
          <execution>
            <id>enforce-versions</id>
            <goals>
              <goal>enforce</goal>
            </goals>
            <configuration>
              <rules>
                <requireJavaVersion>
                  <version>1.5</version>
                </requireJavaVersion>
              </rules>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  [...]
</project>

Но я не уверен, что действительно понял вопрос. Если это не то, что вам нужно, возможно, вы могли бы объявить свои специфические зависимости JDK в профилях и использовать триггер активации на основе версии JDK. Например:

<profiles>
  <profile>
    <activation>
      <jdk>1.5</jdk>
    </activation>
    ...
  </profile>
</profiles>

Эта конфигурация активирует профиль, когда версия JDK начинается с "1.5".

2 голосов
/ 02 апреля 2010

Я нашел эту статью:

http://maven.apache.org/plugins/maven-compiler-plugin/examples/compile-using-different-jdk.html

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>2.1</version>
        <configuration>
          <verbose>true</verbose>
          <fork>true</fork>
          <executable>${JAVA_1_4_HOME}/bin/javac</executable>
          <compilerVersion>1.3</compilerVersion>
        </configuration>
      </plugin>
    </plugins>
    [...]
  </build>
  [...]
</project>
1 голос
/ 02 апреля 2010

Я считаю, что это можно решить с помощью следующего плагина в вашей поме:

<plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.1</version>
                <configuration>
                    <source>1.6</source>
                    <target>1.6</target>
                </configuration>
            </plugin> 

Здесь вы нацелены на версию 1.6 или напишите свою собственную версию

...