Eclipse에서 가져온 Maven 프로젝트가 기본적으로 Java 1.6 대신 Java 1.5를 사용하게 만드는 원인은 무엇입니까?


209

필자는 Maven 프로젝트를 가져 왔으며 1.6을 Eclipse 기본값으로 구성했지만 Java 1.5를 사용했다 Preferences->Java->Installed JREs.

나는 여전히 빌드 오류가 프로젝트가 자바 1.5를 사용하여 때부터 왼쪽했던 1.6 JRE를 사용하는 Maven 프로젝트를 변경하면 (나는 이러한 빌드 오류 앞서 설명 : 내가 m2eclipse에와 빌드 오류가 아닌 명령 줄에서 maven2와 -내 m2eclipse가 잘못 구성되어 있습니까? )

프로젝트를 삭제하고 다시 시도하지만 이번에는 빌드 1.6에서 Java 1.6을 사용하여 빌드 문제가 제거되는지 확인하고 싶습니다.

프로젝트를 가져올 때 프로젝트가 Java 1.6을 사용하도록하려면 어떻게해야합니까?


4
m2eclipse는 Eclipse 기본값에 대해 구성한 내용을 무시합니다. 기본적으로 항상 1.5를 사용합니다. 그러나 귀하의 경우 프로젝트는 maven-compiler-plugin을 사용하고 버전을 명시 적으로 1.5로 설정합니다. pom에서이를 변경하고 프로젝트 구성을 업데이트하여 버전을 변경해야합니다. 그러나 나는 이미 이것을 시도했고 그것은 나를 위해 작동하지 않았다. 나는 다른 사람들이 당신의 다른 질문에서 말한 것에도 불구하고 그것이 문제가 아니라고 확신합니다.
Raoul Duke

1
아니요, m2eclipse의 기본값은 항상 1.5가 아니며 maven-compiler-plugin의 설정이 기본값입니다.
Pascal Thivent

1
maven-compiler-plugin의 설정을 어떻게 변경합니까?
Lokathor

답변:


248

m2eclipse 플러그인은 Eclipse 기본값을 사용하지 않으며 m2eclipse 플러그인은 POM에서 설정을 파생합니다. 따라서 Eclipse에서 가져올 때 Java 1.6 설정을 사용하도록 Maven 프로젝트를 구성하려면 maven-compiler-plugin이미 제안한대로 적절하게 구성하십시오 .

<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>

프로젝트를 이미 가져온 경우 프로젝트 구성을 업데이트하십시오 (프로젝트를 마우스 오른쪽 단추로 클릭 한 다음 Maven V 업데이트 프로젝트 구성 ).


1
소리 치지 마십시오. 그냥 무례합니다. 프로젝트를 삭제하고 다시 가져온 후에 작동했습니다. 그러나 그렇지 않다.
Raoul Duke

6
@Raoul 작성한 프로젝트 구성업데이트 하면 프로젝트를 다시 가져 오지 않고도 작동 합니다. 나는 이것을 3 번 테스트했고 그것은 내 컴퓨터에서 작동합니다.
Pascal Thivent

파스칼의 대답이 분명한 것처럼 (나는 플러스 1입니다) '프로젝트 구성 업데이트'는 프로젝트를 제거해야했기 때문에 모든 상황에서 작동하지 않는 것 같고 다른 많은 것들을 시도했습니다 (아마도 버그) 일식의 버전에서)
rogermushroom

최신 Java 버전에 대해서는 답변을 참조하십시오
Line

33

프로젝트 설명 아래의 pom.xml에 이것을 추가하고 작동했습니다.

<properties>
    <maven.compiler.source>1.6</maven.compiler.source>
    <maven.compiler.target>1.6</maven.compiler.target>
</properties>

1
이것은 받아 들인 대답보다 간단하고 나에게도 좋았습니다.
벽돌

1
이것은 나를 위해 일했지만 허용 된 답변이 효과가 없었습니다.
Sanjay Singh

1
이것과 maven-compiler-plugin 구성의 차이점은 무엇입니까? 두 가지 방법 모두 나를 위해 일하고 있습니다.
Aamir Rizwan

Java 9를 사용중인 경우 버전 번호가 변경되었습니다. 따라서 1.9 대신 9를 사용하십시오. <properties> <maven.compiler.source>9</maven.compiler.source> <maven.compiler.target>9</maven.compiler.target> </properties>
chux

"java.version"속성을 설정하고 "maven-compiler-plugin"구성의 빌드 구성에서 사용하는 것으로 충분하다고 생각했습니다. "maven.compiler.source"및 "maven.compiler.target"속성은 문제가 사라짐에 따라 Eclipse Maven 플러그인 상호 작용이 있어야합니다.
JasonTolotta

29

이미 제공된 답변에 무언가를 추가하고 싶었습니다. 기본적으로 maven-compiler-plugin 은 m2e가 정보를 얻는 Java 1.5를 사용하여 프로젝트를 컴파일합니다.

그렇기 때문에 프로젝트에서 maven-compiler-plugin 을 1.5 이외의 것으로 명시 적으로 선언 해야하는 이유 입니다. 유효 pom.xmlmaven-compiler-plugin 에 기본 설정을 내재적으로 사용합니다 pom.xml.


6
나에게 이것은 "새 Maven 프로젝트를 만들 때 왜 1.5입니까?"
Don Cheadle

1
@LIttleAncientForestKami는 3.7.0으로 검증되었으므로 값은 상수 DEFAULT_SOURCE및 로 설정 DEFAULT_TARGET되지만 여전히 1.5로 설정됩니다.
Adam Burley

이제 1.6이되어야합니까? 나는 여전히 나를 위해 1.5를 사용하는 것처럼 보이기 때문에 궁금합니다.
라인

@ 라인 : 아니요, 슈퍼 효과적인 부모 퐁은 절대 변하지 않아야하기 때문에 알려진 maven-verse가 끝날 때까지 1.5 일 것입니다.
Nicholas

아이러니입니까? ;) 답변에 링크 된 사이트에는 "현재 기본 소스 설정은 1.6이고 기본 대상 설정은 1.6"입니다.
Line

27
<project>

    <!-- ... -->

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

</project>

8
Inside <build> </ build>
Phillip Kamikaze 2016 년

이 답변이 마음에 들지 않습니다. 코드 일 뿐이므로 받아 들여진 것보다 이점을 보지 못합니다 (설명되지 않았기 때문일 수 있습니다.)
Line

8

다음은 Java 1.5의 근본 원인입니다.

또한 현재 Maven을 실행하는 JDK와 관계없이 기본 소스 설정은 1.5이고 기본 대상 설정은 1.5입니다. 이 기본값을 변경하려면 소스 및 대상을 설정해야합니다.

참조 : Apache Mavem 컴파일러 플러그인

세부 사항은 다음과 같습니다.

일반 pom.xml

    <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 
             http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

    <groupId>com.pluralsight</groupId>
    <artifactId>spring_sample</artifactId>
    <version>1.0-SNAPSHOT</version>

</project>

다음 플러그인은 확장 된 POM 버전 (Effective POM)에서 가져옵니다.

이것은 명령 줄 에서이 명령으로 얻을 수 있습니다. C:\mvn help:effective-pom여기에는 전체 pom 대신 작은 조각을 넣었습니다.

    <plugin>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.1</version>
    <executions>
      <execution>
        <id>default-compile</id>
        <phase>compile</phase>
        <goals>
          <goal>compile</goal>
        </goals>
      </execution>
      <execution>
        <id>default-testCompile</id>
        <phase>test-compile</phase>
        <goals>
          <goal>testCompile</goal>
        </goals>
      </execution>
    </executions>
  </plugin>

여기에서도 Java 버전이 어디에 정의되어 있는지 알지 못하고 더 자세히 파고들 수 있습니다 ...

jar 파일로 제공되는 Apache Maven Compiler Plugin»3.1 플러그인을 다운로드하여 7-zip 과 같은 파일 압축 도구에서 엽니 다.

항아리를 가로 질러서

plugin.xml

폴더 안의 파일

maven-compiler-plugin-3.1.jar \ META-INF \ maven \

이제 파일에 다음 섹션이 나타납니다.

      <configuration>
    <basedir implementation="java.io.File" default-value="${basedir}"/>
    <buildDirectory implementation="java.io.File" default-value="${project.build.directory}"/>
    <classpathElements implementation="java.util.List" default-value="${project.testClasspathElements}"/>
    <compileSourceRoots implementation="java.util.List" default-value="${project.testCompileSourceRoots}"/>
    <compilerId implementation="java.lang.String" default-value="javac">${maven.compiler.compilerId}</compilerId>
    <compilerReuseStrategy implementation="java.lang.String" default-value="${reuseCreated}">${maven.compiler.compilerReuseStrategy}</compilerReuseStrategy>
    <compilerVersion implementation="java.lang.String">${maven.compiler.compilerVersion}</compilerVersion>
    <debug implementation="boolean" default-value="true">${maven.compiler.debug}</debug>
    <debuglevel implementation="java.lang.String">${maven.compiler.debuglevel}</debuglevel>
    <encoding implementation="java.lang.String" default-value="${project.build.sourceEncoding}">${encoding}</encoding>
    <executable implementation="java.lang.String">${maven.compiler.executable}</executable>
    <failOnError implementation="boolean" default-value="true">${maven.compiler.failOnError}</failOnError>
    <forceJavacCompilerUse implementation="boolean" default-value="false">${maven.compiler.forceJavacCompilerUse}</forceJavacCompilerUse>
    <fork implementation="boolean" default-value="false">${maven.compiler.fork}</fork>
    <generatedTestSourcesDirectory implementation="java.io.File" default-value="${project.build.directory}/generated-test-sources/test-annotations"/>
    <maxmem implementation="java.lang.String">${maven.compiler.maxmem}</maxmem>
    <meminitial implementation="java.lang.String">${maven.compiler.meminitial}</meminitial>
    <mojoExecution implementation="org.apache.maven.plugin.MojoExecution">${mojoExecution}</mojoExecution>
    <optimize implementation="boolean" default-value="false">${maven.compiler.optimize}</optimize>
    <outputDirectory implementation="java.io.File" default-value="${project.build.testOutputDirectory}"/>
    <showDeprecation implementation="boolean" default-value="false">${maven.compiler.showDeprecation}</showDeprecation>
    <showWarnings implementation="boolean" default-value="false">${maven.compiler.showWarnings}</showWarnings>
    <skip implementation="boolean">${maven.test.skip}</skip>
    <skipMultiThreadWarning implementation="boolean" default-value="false">${maven.compiler.skipMultiThreadWarning}</skipMultiThreadWarning>
    <source implementation="java.lang.String" default-value="1.5">${maven.compiler.source}</source>
    <staleMillis implementation="int" default-value="0">${lastModGranularityMs}</staleMillis>
    <target implementation="java.lang.String" default-value="1.5">${maven.compiler.target}</target>
    <testSource implementation="java.lang.String">${maven.compiler.testSource}</testSource>
    <testTarget implementation="java.lang.String">${maven.compiler.testTarget}</testTarget>
    <useIncrementalCompilation implementation="boolean" default-value="true">${maven.compiler.useIncrementalCompilation}</useIncrementalCompilation>
    <verbose implementation="boolean" default-value="false">${maven.compiler.verbose}</verbose>
    <mavenSession implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
    <session implementation="org.apache.maven.execution.MavenSession" default-value="${session}"/>
  </configuration>

위의 코드를보고 다음 두 줄을 찾으십시오.

    <source implementation="java.lang.String" default-value="1.5">${maven.compiler.source}</source>
    <target implementation="java.lang.String" default-value="1.5">${maven.compiler.target}</target>

행운을 빕니다.


1
예. 이것은 Eclipse와 관련이 없습니다. 예를 들어 이슈가 포함 된 Maven 프로젝트를 만들면 IntelliJ IDEA에서 동일한 문제가 발생 quickstart합니다.
Jan Hettich

안녕하세요, 문제의 근본 원인을 게시 해 주셔서 감사합니다.) 정말 감사합니다!
IanGabes

6

JRE가 실행 구성에 정의되었을 수 있습니다. Eclipse에서 다음 단계에 따라 빌드 JRE를 변경하십시오.

1) 프로젝트를 마우스 오른쪽 버튼으로 클릭하고 실행 도구 > 실행 구성을 선택 하십시오.

2) Run Configurations 창의 왼쪽 패널에서 프로젝트 빌드 구성을 선택하십시오. 오른쪽에는 Main, JRE, Refresh, Source 등 다양한 탭이 있습니다.

3) JRE 탭을 클릭하면 다음과 같이 표시됩니다

여기에 이미지 설명을 입력하십시오

4) 기본적으로 Work Default JRE (기본 설정-> Java-> 설치된 JRE 에서 기본값으로 선택한 JRE )가 사용됩니다. 설치된 다른 JRE를 사용하려면 Alternate JRE 확인란을 선택하고 드롭 다운에서 선호하는 JRE를 선택하십시오.


이 답변에 감사드립니다. 실행 구성이 작업 공간 기본값으로 실행되어 실제로 도움이되었습니다!
Damir Ciganović-Janković

이것은 우리가 이것을 간과했다고 믿을 수 없었습니다!
phil oO

3

Springboot에서 가장 간단한 솔루션

Springboot를 사용하면 가장 간단한 것을 알려 드리겠습니다.

<properties>
  <java.version>1.8</java.version>
</properties>

그런 다음 Eclipse 프로젝트를 마우스 오른쪽 단추로 클릭하십시오. Maven> 프로젝트 업데이트> pom.xml에서 프로젝트 구성 업데이트

그렇게해야합니다.


2

프로젝트 별 설정

이것이 잘못 될 수있는 또 하나의 장소는 Eclipse의 프로젝트 특정 설정에 있습니다.

  1. 프로젝트 속성 : 프로젝트와 다음 중 하나를 클릭하십시오.

    • Alt + Enter
    • 메뉴> 프로젝트> 속성
    • 프로젝트를 마우스 오른쪽 버튼으로 클릭하고> 프로젝트 속성 (메뉴의 마지막 항목)
  2. "Java Compiler"를 클릭하십시오

  3. "프로젝트 특정 설정 사용"의 선택을 해제하십시오 (또는 직접 변경하십시오).

고객 요구 사항으로 인해 프로젝트를 1.6으로 유지할 수있었습니다. 1.7로 업그레이드해야 할 때 Java 버전을 모든 곳에서 변경해야했기 때문에 어려움을 겪었습니다.

  • 프로젝트 POM
  • Eclipse 작업 공간 기본값
  • 프로젝트 별 설정
  • 가상 머신 실행 (1.6은 모든 용도로 사용됨)

1

TychoMaven 을 사용하여 번들을 빌드 Bundle-RequiredExecutionEnvironment하는 경우 매니페스트 파일 ( manifest.mf) 에 잘못된 실행 환경 ( )이 정의되어있을 수 있습니다. 예를 들면 다음과 같습니다.

Manifest-Version: 1.0
Bundle-ManifestVersion: 2
Bundle-Name: Engine Plug-in
Bundle-SymbolicName: com.foo.bar
Bundle-Version: 4.6.5.qualifier
Bundle-Activator: com.foo.bar.Activator
Bundle-Vendor: Foobar Technologies Ltd.
Require-Bundle: org.eclipse.core.runtime,
 org.jdom;bundle-version="1.0.0",
 org.apache.commons.codec;bundle-version="1.3.0",
 bcprov-ext;bundle-version="1.47.0"
Bundle-RequiredExecutionEnvironment: JavaSE-1.5
Export-Package: ...
...
Import-Package: ...
...

내 경우에는 다른 모든 것이 괜찮 았습니다. 컴파일러 플러그인 (일반 maven 및 tycho도)이 올바르게 설정되었지만 여전히 매니페스트 때문에 m2에서 오래된 준수 수준을 생성했습니다. 나는 경험을 공유한다고 생각했다.


1

내 문제는 누군가 Java1.5를 기본 JRE로 참조하는 .project 및 .classpath 파일을 커밋 한 것으로 나타났습니다.

<classpathentry kind="con" path="org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5">
    <attributes>
        <attribute name="owner.project.facets" value="java"/>
    </attributes>
</classpathentry>

프로젝트를 닫고 파일을 제거한 다음 Maven 프로젝트로 다시 가져 와서 프로젝트를 1.5로 되 돌리지 않고 작업 공간 JRE 또는 관련 jdk를 사용하도록 올바르게 설정할 수있었습니다. 따라서 SVN에 .project 및 .classpath 파일을 체크인하지 마십시오.

이것이 다른 사람들을 돕기를 바랍니다.


0

새로 작성된 프로젝트 또는 Eclipse에서 가져온 프로젝트가 Java 1.5 이외의 다른 기본 Java 버전을 사용하도록하려면 maven-compiler-plugin에서 구성을 변경할 수 있습니다.

  • .m2 / repository / org / apache / maven / plugins / maven-compiler-plugin / 3.1 폴더로 이동하십시오.
  • zip 프로그램으로 maven-compiler-plugin-3.1.jar을 엽니 다.
  • META-INF / maven으로 이동하여 plugin.xml을여십시오.
  • 다음 행에서 :
    <source implementation = "java.lang.String"default-value = "1.5"> $ {maven.compiler.source} </ source>
    <target implementation = "java.lang.String"기본값 = "1.5"> $ {maven.compiler.target} </ target>

  • 기본값을 1.6 또는 1.8 또는 원하는대로 변경하십시오.

  • 파일을 저장하고 zip 파일로 다시 쓰여 졌는지 확인하십시오.

지금부터 모든 새로운 Maven 프로젝트는 지정한 Java 버전을 사용합니다.

다음 블로그 게시물에서 정보를 얻을 수 있습니다 : https://sandocean.wordpress.com/2019/03/22/directly-generating-maven-projects-in-eclipse-with-java-version-newer-than-1-5/


0

JDK 버전을 변경하려면 다음을 수행하십시오.

1- 프로젝트> 속성
2- Java 빌드 경로로 이동
3- 라이브러리에서 JRE 시스템 ...을
선택 하고 편집을 클릭하십시오. 4- 적절한 버전을 선택하고 확인하십시오

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.