내가 수정 한 Hudson 플러그인을 만들려고하는데 jdk1.6이 필요합니다. 이것은 괜찮지 만 다른 jdk가 어디에 있는지 maven에게 어떻게 알 수 있는지 알 수 없습니다. 인터넷에서 언급이 적었지만 나에게는 적용되지 않는 것 같습니다. 일부는 일부 구성을 추가하는 것이 .m2/settings.xml
좋지만에 없습니다 settings.xml
. 또한 모든 메이븐 빌드에 1.6을 사용하고 싶지 않습니다.
하나의 꼬임은 mvn
cygwin에서 사용 하고 있다는 것입니다. 프로젝트 pom 파일에서 사양을 만들 수 있어야하지만 기존 pom은 거의 없습니다.
결론은 maven의 단일 호출에 대해 jdk를 지정하는 방법이 있습니까?
답변
결론은 maven의 단일 호출에 대해 jdk를 지정하는 방법이 있습니까?
JAVA_HOME
환경 변수 의 값을 임시로 변경하십시오 .
답변
maven이 이제 해결책을 제시 한 것 같습니다 : 다른 JDK를 사용하여 소스 컴파일
JAVA_HOME
JDK7 (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.xml
pom은 플랫폼에 독립적입니다.
<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_HOME
Pascal과 같은 환경 변수 를 설정한다고 말합니다 . Cygwin에서 bash를 쉘로 사용하면 다음과 같아야합니다.
export JAVA_HOME=/cygdrive/c/pathtothejdk
Java 디렉토리 경로를 환경 변수 앞에 추가해도 다음과 같이 손상되지 않습니다 .bin
PATH
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로 전환 할 위치로 설정합니다.