Maven 2 Maven项目对JDK版本的依赖性

Maven 2 Maven项目对JDK版本的依赖性,maven-2,dependencies,java,Maven 2,Dependencies,Java,我有一些项目需要使用特定版本的JDK进行构建 问题不在源参数和目标参数中,而是在编译期间使用的运行时JAR中。 在某些情况下,如果我尝试使用错误的JDK进行编译,就会出现编译错误,但有时构建成功,并且在使用JAR时会出现运行时错误 例如,在eclipse中,我能够在.classpath文件中为项目建立执行环境 在maven有没有办法处理这种情况 我希望能够像POM文件中项目的其他依赖项一样处理JRE依赖项 更新: 当我问这个问题时,被接受的解决方案是最好的,所以我不会改变它。同时,针对这类问题提

我有一些项目需要使用特定版本的JDK进行构建

问题不在源参数和目标参数中,而是在编译期间使用的运行时JAR中。 在某些情况下,如果我尝试使用错误的JDK进行编译,就会出现编译错误,但有时构建成功,并且在使用JAR时会出现运行时错误

例如,在eclipse中,我能够在.classpath文件中为项目建立执行环境

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

我希望能够像POM文件中项目的其他依赖项一样处理JRE依赖项

更新:
当我问这个问题时,被接受的解决方案是最好的,所以我不会改变它。同时,针对这类问题提出了一种新的解决方案:。有关更多详细信息,请访问链接。

我相信,通过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> 

org.apache.maven.plugins
maven编译器插件
2.1
1.6
1.6
在这里,您可以以1.6版为目标,或者编写自己的版本

我有一些项目需要使用特定版本的JDK进行构建

您可以使用强制使用特定版本的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>

[...]
org.apache.maven.plugins
maven enforcer插件
强制执行版本
执行
1.5
[...]
但我不确定我是否真的理解了这个问题。如果这不是您想要的,也许您可以在概要文件中声明特定于JDK的依赖项,并使用基于JDK版本的激活触发器。例如:

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

1.5
...

当JDK的版本以“1.5”开头时,此配置将触发概要文件

我发现了这篇文章:


[...]
[...]
org.apache.maven.plugins
maven编译器插件
2.1
真的
真的
${JAVA_1_4_HOME}/bin/javac
1.3
[...]
[...]

No,正如我所说,这不是源代码和目标参数的问题,因为这只影响编译器读取语言(源代码)和生成字节码(目标代码)的方式,而不影响编译中使用的库。如果您使用1.6 jdk编译一个以1.5作为源/目标参数的项目,您仍然可以得到一个jar,该jar对于使用1.5 jre执行无效(例如,库类中的重载方法可能会出现问题)。@Andrea那么Pascal解决方案就是答案。我认为概要文件并不能解决我的问题。我需要强制maven在编译项目时使用特定的jdk。最好的解决方案似乎是Simone提出的。感谢enforcer插件对我来说真的很有用,即使它不能完全解决我的问题。
<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>