2010-04-02 44 views
7

我有需要使用特定版本的JDK构建的项目。对JDK版本的Maven项目依赖关系

该问题不在源代码和目标参数中,而在编译期间使用的运行时的jar中。 在某些情况下,如果我尝试使用错误的JDK进行编译,则会出现编译错误,但有时编译会成功,并且在使用罐子时会出现运行时错误。

例如在eclipse中,我有能力在.classpath文件中建立项目的执行环境。

有没有办法在maven中处理这种情况?

我想要的是能够像在POM文件中项目的其他依赖项一样处理JRE依赖项。

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

谢谢,这解决了我的问题 – 2010-04-02 15:20:02

1

我相信这可以在你的POM以下插件来解决:

<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作为源/目标参数的项目,仍然可以得到一个无效的jar文件(例如,在库类中可能存在重载方法的问题)。 – 2010-04-02 14:25:19

+0

@Andrea然后帕斯卡尔解决方案是答案 – ant 2010-04-02 14:27:48

+0

是的,我认为配置文件是你需要的。 – 2010-04-02 14:41:24

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

感谢执行者插件对我来说真的很有用,即使它不能完全解决我的问题。 – 2010-04-02 15:21:33