Eclipse의 Import된 Maven 프로젝트가 기본적으로 Java 1.6 대신 Java 1.5를 사용하는 이유는 무엇이며, 어떻게 하면 그렇지 않은지 확인할 수 있습니까?
Maven 프로젝트를 Import했는데, 이클립스 디폴트로 1.6이 설정되어 있는데도 Java 1.5가 사용되었습니다.Preferences->Java->Installed JREs
.
1.6 JRE를 사용하도록 Maven 프로젝트를 변경해도 Java 1.5를 사용하던 시점부터 빌드 오류가 남아 있었습니다(앞에서 설명한 바와 같이 m2eclipse에서는 빌드 오류가 발생하지만 명령줄에서는 mven2에서는 빌드 오류가 발생하지 않았습니까?에서 m2eclipse의 설정이 잘못되었습니까?).
프로젝트를 삭제하고 다시 시도합니다만, 이번에는 처음부터 Java 1.6을 사용하고 있는지 확인하고 빌드 문제를 해소하고 싶습니다.
프로젝트를 Import할 때 Java 1.6을 사용하려면 어떻게 해야 합니까?
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 Update Project Configuration).
프로젝트 설명 아래에 있는 pom.xml에 이것을 추가했더니 효과가 있었습니다.
<properties>
<maven.compiler.source>1.6</maven.compiler.source>
<maven.compiler.target>1.6</maven.compiler.target>
</properties>
저는 이미 제공된 답변에 무언가를 추가하고 싶었습니다. maven-compiler-plugin은 기본적으로 m2e의 정보를 얻을 수 있는 Java 1.5를 사용하여 프로젝트를 컴파일합니다.
따라서 1.5 이외의 것을 사용하여 프로젝트에서 maven-compiler-plugin을 명시적으로 선언해야 합니다.효과적pom.xml
maven-contractions 기본 설정을 암묵적으로 사용합니다. pom.xml
.
<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>
JRE는 실행 Configuration에 정의되어 있을 가능성이 있습니다.빌드 JRE를 변경하려면 Eclipse의 다음 단계를 따르십시오.
1) 프로젝트를 오른쪽 클릭하여 [Run As]> [ Run Configurations ]를 선택합니다.
2) [Run Configurations](구성실행)창에서 왼쪽 패널에서 프로젝트 빌드 구성을 선택합니다.오른쪽에는 다양한 탭이 표시됩니다.기본, JRE, 새로 고침, 소스...
3) [JRE] 탭을 클릭하면 다음과 같은 화면이 나타납니다.
4) 디폴트로는 Work Default JRE(기본 설정 -> Java -> 설치된 JRE)가 사용됩니다.설치된 다른 JRE를 사용하는 경우 [Alternate JRE]체크박스를 켜고 드롭다운에서 원하는 JRE를 선택합니다.
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 버전(유효한 POM)에서 가져온 것입니다.
이 명령어는 명령줄에서 얻을 수 있습니다.C:\mvn help:effective-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 버전이 정의되어 있는 곳은 보이지 않습니다.자세한 내용은...
Apache Maven 컴파일러 플러그인 © 3.1을 jar로 다운로드하여 7-zip과 같은 파일 압축 도구로 엽니다.
항아리를 통과하여 확인
plugin.xml
파일 내부 폴더
maven-flash-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>
행운을 빌어요.
Springboot에서 가장 심플한 솔루션
Springboot을 사용하는 경우 가장 간단한 예를 제시하겠습니다.
<properties>
<java.version>1.8</java.version>
</properties>
다음으로 Eclipse 프로젝트를 우클릭합니다.[ Maven ]> [ Update project ]> [ Update from pom . xml ]의 프로젝트 설정을 갱신합니다.
그걸로 충분할 거야.
Tycho 및 Maven을 사용하여 번들을 빌드하는 경우 실행 환경이 잘못되어 있는 경우가 한 가지 더 있습니다.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는 매니페스트 때문에 오래된 컴플라이언스 수준을 생성했습니다.나도 그 경험을 공유한다고 생각했어.
프로젝트별 설정
이 문제가 발생할 수 있는 또 하나의 장소는 프로젝트 고유의 설정인 이클립스입니다.
프로젝트 속성: 프로젝트를 클릭하고 다음 중 하나를 클릭합니다.
- Alt + 입력
- 메뉴 > 프로젝트 > 속성
- [ Project ]> [ Project Properties ]를 오른쪽 클릭합니다(메뉴의 마지막 항목).
"Java 컴파일러"를 클릭합니다.
- "프로젝트별 설정 사용"을 선택 해제하거나 모두 수동으로 변경합니다.
고객의 요건에 따라 프로젝트를 1.6으로 유지할 수 있도록 했습니다.1.7로 업그레이드해야 할 때는 Java 버전을 처음부터 변경해야 했기 때문에 어려움을 겪었습니다.
- 프로젝트 POM
- Eclipse 작업영역 기본값
- 프로젝트별 설정
- 실행 중인 가상 시스템(1.6이 모든 작업에 사용됨)
Eclipse가 Java 버전 > = 9를 지정한 경우에도 왜 여전히 Maven 프로젝트의 Java 빌드 경로에 J2SE-1.5 라이브러리를 배치하는지 궁금할 경우maven.compiler.release
속성(2020년 10월 현재, 즉 Eclipse 버전 2020-09(Maven 버전 3.6.3 포함): Maven은 기본적으로 Maven 컴파일러 플러그인의 버전 3.1을 사용하는 반면 릴리스 속성은 버전 3.6에서만 도입되었습니다.
따라서 릴리스 속성을 사용할 때는 현재 버전의 Maven 컴파일러 플러그인을 pom.xml에 포함시키는 것을 잊지 마십시오.
<properties>
<maven.compiler.release>15</maven.compiler.release>
</properties>
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
</plugin>
</plugins>
</build>
또는 플러그인 구성에서 Java 버전을 직접 지정합니다.
<build>
<plugins>
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>3.8.1</version>
<configuration>
<release>15</release>
</configuration>
</plugin>
</plugins>
</build>
이렇게 하면 더 일찍 봤더라면 한 시간 동안 찾을 수 있었을 텐데, 받아들여진 답변에 대한 Line의 코멘트를 알 수 있습니다.
디폴트 JRE로서 Java1.5를 참조하는 .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 프로젝트로 다시 Import함으로써 워크스페이스 JRE 또는 관련 jdk를 1.5로 되돌리지 않고 사용하도록 프로젝트를 올바르게 설정할 수 있었습니다.따라서 SVN에 .project 및 .classpath 파일을 체크인하지 마십시오.
이것이 다른 사람들에게 도움이 되길 바랍니다.
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으로 이동하여 플러그인을 엽니다.xml
다음 행:
<source implementation="syslog.syslog.desString" default-value="1.5"> ${maven.disples.source}<source>
<target implementation="target.httpString" default-value="1.5"> ${maven.default.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/
JDK 버전을 변경하려면 다음 작업을 수행합니다.
1-프로젝트> 속성
2- Java 빌드 경로로 이동
3- Libraries(라이브러리)에서 JRE System...(JRE 시스템...)을 선택하고 Edit(편집)을 클릭합니다.
4 - 적절한 버전을 선택하고 검증합니다.
언급URL : https://stackoverflow.com/questions/3539139/what-causes-imported-maven-project-in-eclipse-to-use-java-1-5-instead-of-java-1
'source' 카테고리의 다른 글
Vue.js를 사용하여 소품을 기반으로 한 요소에 여러 클래스를 추가하려면 어떻게 해야 합니까? (0) | 2022.08.01 |
---|---|
대형 프로젝트에서 선호하는 C/C++ 헤더 정책은 무엇입니까? (0) | 2022.07.31 |
조건부 부정 대신 abs() 또는 fabs()를 사용하는 이유는 무엇입니까? (0) | 2022.07.31 |
문자열을 분할하고 구분 기호를 유지하는 방법 (0) | 2022.07.31 |
Vue.js 데이터 테이블이 첫 번째 열에 데이터만 표시됨 (0) | 2022.07.31 |