2010-04-02 3 views
7

У меня есть проекты, которые необходимо создать с помощью конкретной версии JDK.Зависимость проекта Maven от версии JDK

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

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

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

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

UPDATE:

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

ответ

2

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

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

Спасибо, это решает мою проблему –

1

Я считаю, что это может быть решена с помощью следующих плагин в вашем ПОМ:

<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, или написать собственную версию

+1

Нет, как я уже сказал, что это не вопрос параметра источника и цели, потому что это влияние только как компилятор читать на языке (источник) и генерировать байт-код (цель), но не библиотеки, используемые в компиляции. Если вы скомпилируете с использованием 1,6 jdk проекта с 1.5 в качестве исходного/целевого параметра, вы все равно можете получить банку, которая недействительна для выполнения с 1,5 jre (например, могут быть проблемы с перегруженными методами в библиотечных классах). –

+0

@ Аndrea, то решение Pascal - это ответ – ant

+0

Да, я думаю, что профили - это то, что вам нужно. –

2

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

Вы можете использовать Maven Enforcer plugin, чтобы обеспечить использование определенной версии 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».

+0

Спасибо, плагин forcecer действительно полезен для меня, даже если он не полностью разрешает мою проблему. –

Смежные вопросы