7

我的系统上安装了 JDK 1.6 和 1.7(Linux,在 /opt 目录下)。我在路径中添加了 JDK 1.6 的 bin 目录,所以这是默认使用的 Java 版本。

我正在开发一个需要 JDK 1.7 和一些需要 1.6 的项目。以前我在 Eclipse 中设置了 JDK 1.7 设置,但我想将此项目转换为 Maven,以便每个人都可以使用他们喜欢的编辑器。

是否可以在 Maven 安装/配置中指定 1.7 位置(而不是在 POM 文件中),这样它默认使用 1.6,而在 POM 中指定项目需要它时使用 1.7?据我所知,每个从事项目的人都应该在他们的 POM 文件中具有相同的内容,所以我不愿意在这里设置 Java 7 目录的位置(因为它在每个人的机器上都会有所不同)。

$ mvn --version
Apache Maven 3.0.5 (r01de14724cdef164cd33c7c8c2fe155faf9602da; 2013-02-19 13:51:28+0000)
Maven home: /opt/apache-maven-3.0.5
Java version: 1.6.0_45, vendor: Sun Microsystems Inc.
Java home: /opt/jdk1.6.0_45/jre
Default locale: en_GB, platform encoding: UTF-8
OS name: "linux", version: "3.8.0-27-generic", arch: "amd64", family: "unix"

添加以下内容:

<build>
    <plugins>
        <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
            <source>1.7</source>
            <target>1.7</target>
        </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.6</version>
            <configuration>
                <outputDirectory>${project.build.outputDirectory}/resources</outputDirectory>
            </configuration>
        </plugin>
    </plugins>
</build>

结果是:

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project golemlite: Fatal error compiling: invalid target release: 1.7 -> [Help 1]
4

3 回答 3

4

看看这里。您可以在 settings.xml 中设置一个属性并在 pom.xml 中使用它。请注意,每个人都必须定义该属性。

至于你的例子:

<build>
<plugins>
    <plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <configuration>
        <source>1.7</source>
        <target>1.7</target>
        <fork>true</fork>
        <executable>${JAVA_1_7_HOME}/bin/javac</executable>
    </configuration>
    </plugin>
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
        <configuration>
            <outputDirectory>${project.build.outputDirectory}/resources</outputDirectory>
        </configuration>
    </plugin>
</plugins>
</build>

并在设置中:

<settings>
  [...]
  <profiles>
    [...]
    <profile>
      <id>compiler</id>
        <properties>
          <JAVA_1_7_HOME>/path/to/jdk7</JAVA_1_7_HOME>
        </properties>
    </profile>
  </profiles>
  [...]
  <activeProfiles>
    <activeProfile>compiler</activeProfile>
  </activeProfiles>
</settings>
于 2013-08-08T12:43:45.400 回答
1

mvn.sh您可以在您的附近放置一个名为您的文件,您可以pom.xml在其中设置JAVA_HOME任何您想要的文件。然后,构建项目,如./mvn clean install. 并确保不要将其检查到 VCS。

于 2013-08-09T20:34:31.897 回答
1

Maven 使用 JAVA_HOME 系统变量中的任何版本。所以我喜欢添加到我的 .bash_profile 函数中,以便在我当前的 shell 中交换它们,这样你可以默认保留 Java 6,但当你需要构建一个更新的项目时,你可以轻松地切换到 Java 7 甚至 8。

按需更改 Java 版本的要点

如果您的终端不是 bash,那么您可能需要调整此解决方案。

就我个人而言,我更喜欢在 settings.xml 中设置它,尽管它的工作量稍大一些,因为它允许您在所有构建工具中使用相同的解决方案,甚至仅用于运行针对其他 Java 版本构建的 jar。

因此,您的解决方案可能是在您的 .bash_profile 中添加类似这样的内容(清楚地调整路径以适应您机器上安装 Java 版本的位置):

function java6
{
  JAVA_HOME=/Library/Java/JavaVirtualMachines/1.6.0_65-b14-462.jdk/Contents/Home
  export JAVA_HOME
}

function java7
{
  JAVA_HOME=/Library/Java/JavaVirtualMachines/jdk1.7.0_21.jdk/Contents/Home
  export JAVA_HOME
}
于 2014-04-08T10:04:50.647 回答