อะไรทำให้โครงการ Maven ที่นำเข้าใน Eclipse ใช้ Java 1.5 แทน Java 1.6 โดยค่าเริ่มต้นและฉันจะมั่นใจได้อย่างไรว่ามันไม่ได้?


209

ผมนำเข้าโครงการ Maven และมันใช้ Java 1.5 แม้ว่าฉันมี 1.6 Preferences->Java->Installed JREsการกำหนดค่าเป็นค่าเริ่มต้นคราสของฉัน

เมื่อฉันเปลี่ยนโครงการ Maven เพื่อใช้ 1.6 JRE ยังคงมีข้อผิดพลาดในการสร้างที่เหลือจากเมื่อโครงการถูกใช้ Java 1.5 (ฉันอธิบายข้อผิดพลาดการสร้างเหล่านี้ก่อนหน้านี้ใน: ฉันมีข้อผิดพลาดในการสร้างด้วย m2eclipse แต่ไม่ใช่กับ maven2 บนบรรทัดคำสั่ง - m2eclipse ของฉันตั้งค่าผิดพลาดหรือไม่? )

ฉันจะลบโครงการและลองอีกครั้ง แต่ฉันต้องการตรวจสอบให้แน่ใจว่าเวลานี้ว่ามันใช้ 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 ดังนั้นหากคุณต้องการให้โครงการ Maven ถูกกำหนดค่าให้ใช้การตั้งค่า Java 1.6 เมื่อนำเข้าภายใต้ Eclipse ให้กำหนดค่า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 )


1
โปรดอย่าตะโกน นั่นเป็นเพียงแค่ความหยาบคาย มันทำงานได้หลังจากลบและนำเข้าโครงการอีกครั้ง แต่ไม่ใช่อย่างอื่น
Raoul Duke

6
@Roul มันทำงานโดยไม่ต้องนำเข้าโครงการอีกครั้งหากคุณอัปเดตการกำหนดค่าโครงการตามที่ฉันเขียน ฉันทำการทดสอบ 3 ครั้งและมันก็ใช้ได้กับเครื่องของฉัน
Pascal Thivent

เห็นได้ชัดว่าคำตอบของปาสกาลคือ (ฉันบวกด้วย) การปรับปรุงโครงแบบของโครงการดูเหมือนจะไม่ทำงานในทุกสถานการณ์เพราะฉันต้องลบโครงการเช่นกันและฉันลองสิ่งอื่น ๆ อีกมากมาย (อาจเป็นข้อผิดพลาด ในเวอร์ชันของ eclipse)
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 โปรดทราบว่าหมายเลขรุ่นมีการเปลี่ยนแปลง ใช้ 9 แทน 1.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โดยค่าเริ่มต้นจะรวบรวมโครงการของคุณโดยใช้ Java 1.5 ซึ่งเป็นที่ซึ่ง m2e ได้รับข้อมูล

นั่นเป็นเหตุผลที่คุณต้องประกาศmaven-compiler-pluginอย่างชัดเจนในโครงการของคุณด้วยอย่างอื่น 1.5 ของคุณมีประสิทธิภาพpom.xmlโดยปริยายจะใช้ชุดเริ่มต้นในMaven เรียบเรียงปลั๊กอิน pom.xml


6
สำหรับฉันแล้วคำตอบที่ชัดเจนยิ่งขึ้น "ทำไม 1.5 เมื่อฉันสร้างโครงการ Maven ใหม่"
Don Cheadle

1
@LIttleAncientForestKami ตรวจสอบแล้วกับ 3.7.0 โดยตอนนี้ค่าถูกตั้งเป็นค่าคงที่DEFAULT_SOURCEและDEFAULT_TARGETยังคงตั้งค่าเป็น 1.5 ทั้งคู่
Adam Burley

ตอนนี้มันควรเป็น 1.6 จริงไหม? ฉันสงสัยว่าเพราะมันยังคงใช้ 1.5 สำหรับฉัน
บรรทัด

@ เส้น: ไม่น่าจะเป็น 1.5 จนกว่าจะถึงตอนจบของบทกลอนที่รู้จักกันดีเนื่องจากปอมปรมาณูที่มีประสิทธิภาพยอดเยี่ยมไม่ควรเปลี่ยนแปลง
นิโคลัส

นี่ประชดหรือเปล่า ;) เว็บไซต์ที่เชื่อมโยงกับคำตอบบอกว่า "โปรดทราบว่าในปัจจุบันการตั้งค่าแหล่งที่มาเริ่มต้นคือ 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
ภายใน <build> </build>
Phillip Kamikaze

ไม่ชอบคำตอบนี้เพราะมันเป็นรหัสเท่านั้นและฉันไม่เห็นความได้เปรียบเหนือคนที่ยอมรับ (อาจเป็นเพราะมันไม่ได้อธิบาย .. )
Line

8

นี่คือสาเหตุของ java 1.5:

โปรดทราบว่าในปัจจุบันการตั้งค่าแหล่งที่มาเริ่มต้นคือ 1.5 และการตั้งค่าเป้าหมายเริ่มต้นคือ 1.5 ซึ่งเป็นอิสระจาก JDK ที่คุณเรียกใช้ Maven ด้วย หากคุณต้องการเปลี่ยนค่าเริ่มต้นเหล่านี้คุณควรตั้งค่าต้นทางและเป้าหมาย

การอ้างอิง: ปลั๊กอิน 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ฉันเพิ่งวางตัวอย่างเล็ก ๆ ที่นี่แทน 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 Compiler Plugin » 3.1ตามที่มีอยู่ใน jar และเปิดในเครื่องมือบีบอัดไฟล์ใด ๆ เช่น7-zip

เข้าไปในโหลและ Findout

plugin.xml

ไฟล์ภายในโฟลเดอร์

Maven เรียบเรียง-ปลั๊กอิน 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>

ดูโค้ดด้านบนและค้นหา 2 บรรทัดต่อไปนี้

    <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 ตัวอย่างเช่นคุณได้รับปัญหาเดียวกันใน IntelliJ IDEA หากสร้างโครงการ Maven ด้วยquickstartสิ่งประดิษฐ์
Jan Hettich

สวัสดีขอขอบคุณที่โพสต์สาเหตุของปัญหา:) ฉันซาบซึ้งจริงๆ!
IanGabes

6

JRE ของคุณอาจถูกกำหนดไว้ในการกำหนดค่าการทำงาน ทำตามขั้นตอนเหล่านี้ใน Eclipse เพื่อเปลี่ยน build JRE

1) คลิกขวาที่โครงการและเลือกเรียกใช้ > เรียกใช้การกำหนดค่า

2) จากหน้าต่าง Run Configurations เลือกโครงร่างการสร้างโครงการของคุณบนแผงด้านซ้าย ทางด้านขวาคุณจะเห็นแท็บต่าง ๆ : หลัก, JRE, รีเฟรช, แหล่งที่มา, ...

3) คลิกที่แท็บ JRE คุณควรเห็นสิ่งนี้

ป้อนคำอธิบายรูปภาพที่นี่

4) โดยค่าเริ่มต้นการทำงานเริ่มต้น JRE (JRE ที่คุณเลือกเป็นค่าเริ่มต้นภายใต้การตั้งค่า -> Java-> JREs ที่ติดตั้ง ) จะถูกนำมาใช้ หากคุณต้องการใช้ JRE ที่ติดตั้งอื่นให้ทำเครื่องหมายในช่องทำเครื่องหมาย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 Workspace ดีฟอลต์
  • การตั้งค่าเฉพาะโครงการ
  • การใช้งานเครื่องเสมือน (ใช้ทุกอย่างกับ 1.6)

1

อีกเหตุผลหนึ่งที่เป็นไปได้หากคุณใช้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 รายการ ฉันคิดว่าฉันแบ่งปันประสบการณ์


1

ฉันพบว่าปัญหาของฉันคือมีคนส่งไฟล์. project และ. classpath ที่อ้างถึง Java1.5 เป็น JRE เริ่มต้น

<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 อีกครั้งฉันสามารถตั้งค่าโปรเจ็กต์ให้ใช้เวิร์กสเปซ JRE หรือ jdk ที่เกี่ยวข้องได้อย่างเหมาะสมโดยไม่ต้องย้อนกลับไปที่ 1.5 ดังนั้นหลีกเลี่ยงการตรวจสอบ SVN ของคุณในไฟล์. project และ. classpath

หวังว่านี่จะช่วยผู้อื่น


0

หากคุณต้องการตรวจสอบให้แน่ใจว่าโครงการที่สร้างขึ้นใหม่หรือโครงการที่นำเข้าใน Eclipse ใช้ Java เวอร์ชันเริ่มต้นอื่นที่ไม่ใช่ Java 1.5 คุณสามารถเปลี่ยนการกำหนดค่าใน maven-compiler-plugin

  • ไปที่โฟลเดอร์. m2 / พื้นที่เก็บข้อมูล / org / apache / maven / plugins / maven-compiler-plugin / 3.1
  • เปิด maven-compiler-plugin-3.1.jar ด้วยโปรแกรม zip
  • ไปที่ META-INF / maven แล้วเปิด plugin.xml
  • ในบรรทัดต่อไปนี้:
    <source implementation = "java.lang.String" default-value = "1.5"> $ {maven.compiler.source} </source>
    <target Implement = "java.lang.String" ค่าเริ่มต้น = "1.5"> $ {maven.compiler.target} </ เป้าหมาย>

  • เปลี่ยนค่าเริ่มต้นเป็น 1.6 หรือ 1.8 หรืออะไรก็ได้ที่คุณต้องการ

  • บันทึกไฟล์และตรวจสอบให้แน่ใจว่าได้เขียนกลับไปยังไฟล์ zip

นับจากนี้ไปในโปรเจ็กต์ Maven ใหม่ทั้งหมดให้ใช้เวอร์ชั่นจาวาที่คุณระบุ

ข้อมูลมาจากบล็อกโพสต์ต่อไปนี้: 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 Build
3 ในไลบรารีเลือกระบบ JRE ... และคลิกที่แก้ไข
4- เลือกเวอร์ชันที่เหมาะสมและตรวจสอบความถูกต้อง

โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.