[java] Maven에서 사용할 JDK 지정

내가 수정 한 Hudson 플러그인을 만들려고하는데 jdk1.6이 필요합니다. 이것은 괜찮지 만 다른 jdk가 어디에 있는지 maven에게 어떻게 알 수 있는지 알 수 없습니다. 인터넷에서 언급이 적었지만 나에게는 적용되지 않는 것 같습니다. 일부는 일부 구성을 추가하는 것이 .m2/settings.xml좋지만에 없습니다 settings.xml. 또한 모든 메이븐 빌드에 1.6을 사용하고 싶지 않습니다.

하나의 꼬임은 mvncygwin에서 사용 하고 있다는 것입니다. 프로젝트 pom 파일에서 사양을 만들 수 있어야하지만 기존 pom은 거의 없습니다.

결론은 maven의 단일 호출에 대해 jdk를 지정하는 방법이 있습니까?



답변

결론은 maven의 단일 호출에 대해 jdk를 지정하는 방법이 있습니까?

JAVA_HOME환경 변수 의 값을 임시로 변경하십시오 .


답변

maven이 이제 해결책을 제시 한 것 같습니다 : 다른 JDK를 사용하여 소스 컴파일

JAVA_HOMEJDK7 (maven 프로세스를 실행할 것)을 지적 한다고 가정 해 봅시다.

당신 pom.xml은 될 수 있습니다 :

<build>
    <plugins>
        <!-- we want JDK 1.6 source and binary compatiblility -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.6</source>
                <target>1.6</target>
            </configuration>
        </plugin>
        <!-- ... -->
        <!-- we want sources to be processed by a specific 1.6 javac -->
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.1</version>
            <configuration>
              <verbose>true</verbose>
              <fork>true</fork>
              <executable>${JAVA_1_6_HOME}/bin/javac</executable>
              <compilerVersion>1.3</compilerVersion>
            </configuration>
        </plugin>
    </plugins>
</build>

개발자가에 다음 행을 추가하고 사용자 정의하면 settings.xmlpom은 플랫폼에 독립적입니다.

<settings>
  [...]
  <profiles>
    [...]
    <profile>
      <id>compiler</id>
        <properties>
          <JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
          <JAVA_1_6_HOME>C:\Program Files\Java\j2sdk1.6.0_18</JAVA_1_6_HOME>
        </properties>
    </profile>
  </profiles>
  [...]
  <activeProfiles>
    <activeProfile>compiler</activeProfile>
  </activeProfiles>
</settings>


답변

compile : compile 에는 경로를 지정할 수 있는 사용자 속성 이 있습니다 javac.

때이 사용자 속성 만 작동합니다 fork입니다 true이다 false기본적으로.

$ mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable=/path/to/the/javac compile

공백이 있으면 값을 큰 따옴표로 묶어야 할 수도 있습니다.

> mvn -Dmaven.compiler.fork=true -Dmaven.compiler.executable="C:\...\javac" compile

Maven 사용자 정의 특성 우선 순위 도 참조하십시오 .


답변

“플러스, 모든 maven 빌드에 1.6을 사용하고 싶지 않습니다.”라고 말했듯이 …. pom 파일을 수정하고 사용할 jdk 버전을 지정하는 것이 좋습니다.

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.7.0</version>
            <configuration>
                <source>1.9</source>
                <target>1.9</target>
            </configuration>
        </plugin>
    </plugins>
</build>

특정 프로젝트가 해당 버전의 jdk를 사용하는지 확인합니다.


답변

JAVA_HOMEPascal과 같은 환경 변수 를 설정한다고 말합니다 . Cygwin에서 bash를 쉘로 사용하면 다음과 같아야합니다.

export JAVA_HOME=/cygdrive/c/pathtothejdk

Java 디렉토리 경로를 환경 변수 앞에 추가해도 다음과 같이 손상되지 않습니다 .binPATH

export PATH=${JAVA_HOME}/bin:${PATH}

또한 maven-enforce-plugin올바른 JDK가 사용되도록 추가 하십시오. 이것은 당신의 치어에 대한 좋은 연습입니다.

<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.6</version>
              </requireJavaVersion>
            </rules>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

Maven Enforcer 플러그인 – 사용법을 참조하십시오 .


답변

나는 오래된 실을 알고 있습니다. 그러나 Maven for Java 8 컴파일러 소스에서 이와 비슷한 문제가 발생했습니다. 나는 이 기사 에서 언급 한 빠른 수정으로 이것을 알아 냈고 여기에 넣을 수 있고 다른 사람들을 도울 수 있다고 생각했습니다.

<properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <maven.compiler.source>1.8</maven.compiler.source>
    <maven.compiler.target>1.8</maven.compiler.target>
</properties>


답변

Maven은 변수 $ JAVACMD를 최종 java 명령으로 사용하고 java 실행 파일이 maven을 다른 JDK로 전환 할 위치로 설정합니다.