Phiên bản Java tự động thay đổi thành java 1.5 sau khi cập nhật maven


121

Tôi đang sử dụng nhật thực làm IDE. Khi tôi nhấp chuột phải vào dự án và sau đó nhấp vào maven cập nhật phiên bản java của tôi thay đổi thành 1.5. Đây là những gì tôi đã làm cho đến nay, tôi đã làm theo tất cả các bước được liệt kê ở đây

http://qussay.com/2013/09/13/solving-dynamic-web-module-3-0-requires-java-1-6-or-newer-in-maven-projects/

  1. Tôi đã thay đổi "đường dẫn xây dựng Java" thành "không gian làm việc mặc định jre 1.8.0_25"
  2. Sau đó, thay đổi "trình biên dịch java" thành 1.8
  3. Sau đó, thay đổi "các khía cạnh của dự án"> java> 1.8
  4. Đã thay đổi phiên bản java pom.xml thành 1.8
    <build>
        <plugins>
            <plugin>
                <groupId>org.eclipse.jetty</groupId>
                <artifactId>jetty-maven-plugin</artifactId>
                <version>9.1.3.v20140225</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugin</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.1</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
        </plugins>
    </build>

Sau tất cả những điều này khi tôi nhấp vào "Cập nhật Maven", phiên bản java của tôi sẽ tự động thay đổi thành 1.5. Cũng trong các bước trên, phiên bản của hai bước đầu tiên cũng tự động thay đổi thành 1.5. Làm thế nào tôi có thể sửa lỗi này?

Câu trả lời:


222

Mở pom.xmltệp của bạn và thêm các dòng sau vào tệp đó:

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

Trong trường hợp 1.8là phiên bản java của hiện tại JDK / JRE của bạn. Một cách khác để làm điều này là thêm một <build>bằng maven-compile-pluginnhư

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

BIÊN TẬP

Nếu bạn đang tìm cách để làm cho nó hoạt động với Java phiên bản 9+, hãy xem câu trả lời của @ JDelorean ở dưới đây và đừng quên dành cho anh ấy một lời khen ngợi :)


4
Tôi nghĩ rằng tôi đã làm theo cách thứ hai và tôi cũng đã đăng mã. Không thấy những gì bạn đã thay đổi trong mã đó
asdlfkjlkj

1
Vâng. Khi tôi trả lời bạn đã không đăng mã. Vì vậy, hãy thêm phần đầu tiên của câu trả lời của tôi. Các propertiesthẻ. Nếu POM của bạn đã có một propertiesthẻ, chỉ cần thêm các thẻ bên trong nó, nó sẽ hoạt động tốt.
Jorge Campos

@asdlfkjlkj nhật thực của bạn đang sử dụng maven nhúng hay cài đặt maven bên ngoài? Một câu hỏi khác, nhật thực của bạn là trỏ tới JRE hay JDK? Đây là hai câu hỏi liên quan đến eclipse + maven tạo nên sự khác biệt.
Jorge Campos

@JorgeCampos - Tôi đã đăng một câu hỏi mới. Bạn có ý kiến ​​gì về điều đó không? stackoverflow.com/questions/42855512/…
Aishu

@JorgeCampos, tôi có thể tìm thấy địa chỉ nào maven-complier-pluginđể thêm dấu <build>? cảm ơn
夢 の の 夢

23

Gặp sự cố tương tự khi tôi cài đặt Java 9. Dự án của tôi sẽ mặc định là Môi trường thực thi J2SE-1.5. Thật kỳ lạ, mức tuân thủ của Java 9 không được tham chiếu như các phiên bản trước, tức là "1.8", mà là "9". Vì vậy, tôi phải cung cấp các thuộc tính của mình và cấu hình plugin trình biên dịch Maven cho phù hợp:

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

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <configuration>
        <source>9</source>
        <target>9</target>
    </configuration>
</plugin>

Điều này dường như đã giải quyết được vấn đề.


1
Cũng đúng với Java 10+ và muốn nói thêm rằng trong một dự án Maven nhiều mô-đun chỉ được yêu cầu trong POM mẹ.
mmeany

Với Java 9 trở lên, có một --release <version>tùy chọn trình biên dịch mới , được ưu tiên hơn nguồn / đích. Điều này có thể được định cấu hình bằng thuộc maven.compiler.releasetính hoặc <release>cài đặt trong plugin maven-compiler. Xem: stackoverflow.com/questions/43102787/…
Thomas Taylor

7

Nguyên nhân gốc rễ của vấn đề này là nếu vì bất kỳ lý do gì Eclipse không thể giải quyết giá trị hợp lệ cho thuộc maven.compiler.sourcetính khi tạo / cập nhật tệp .classpath từ pom, nó sẽ chỉ mặc định sử dụngorg.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/J2SE-1.5 .

Như câu trả lời chuyên nghiệp của @ jorge-campos , có nhiều cách để đặt thuộc tính đó.

Tuy nhiên, câu trả lời của Jorge không dường như phù hợp với tôi. Đây là cài đặt của tôi:

<properties>
    <javaVersion>1.8</javaVersion>
    <maven.compiler.source>${java.version}</maven.compiler.source>
    <maven.compiler.target>${java.version}</maven.compiler.target>
</properties>

...

Chính xác. ${java.version}không bao giờ giải quyết thuộc tính (hoàn toàn khác) javaVersionvà Eclipse bỏ qua thuộc tính và sử dụng thuộc tính mặc định.

Điều này đưa tôi trở lại phần " vì bất kỳ lý do gì " mà tôi đã mở; sự ngu ngốc của nhà phát triển có thể là một trong những lý do đó.


1
Làm thế nào để thay đổi org.eclipse.jdt.launching.JRE_CONTAINER / org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType / J2SE-1.5
aName

Từ chối vì cho rằng "sự ngu ngốc của nhà phát triển có thể là một trong những lý do đó".
Luke Hutchison

Trong trường hợp của tôi, tôi đang sử dụng Maven / Tycho để xây dựng các plugin Eclipse và mặc định ở trên cuối cùng được lấy từ môi trường thực thi được chỉ định trong tệp MANIFEST.MF. Thay đổi môi trường thực thi sang JavaSE-1.8 đã khắc phục sự cố.
mat101

3

Thêm các dòng này vào pom.xml của bạn, sau đó nhấp chuột phải vào Thư viện hệ thống JRE -> Thuộc tính -> Đặt môi trường thực thi chính xác của bạn thành Java 1.8 hoặc phiên bản bạn muốn đặt.

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.2</version> <!-- or whatever current version -->
    <configuration>
      <source>1.8</source>
      <target>1.8</target>
    </configuration>
  </plugin> 

Câu trả lời của bạn bị thiếu <build> <plugins> ... câu trả lời của bạn ở đây ... </plugins> </build> khiến nó trở thành câu trả lời rõ ràng hơn cho mọi người.
Kyle Bridenstine

1

Tôi đã có vấn đề này. Trong trường hợp của tôi, thẻ <properties> & các thẻ lồng nhau mà Jorge Campos đề cập ở trên đã ở sai vị trí. Nếu tôi đặt chúng giữa các thẻ <hostversion> và <dependencies> trong tệp pom.xml, thì hành vi này đã dừng lại.

Điều đó có thể được chọn trong Eclipse nếu xác nhận các tệp này được bật.


1

Tôi gặp sự cố tương tự trên một trong các máy đồng đội của mình. Anh ấy đang sử dụng phiên bản Eclipse cũ, tôi tin rằng anh ấy đang sử dụng Keppler. Dự án sau khi được cập nhật thay đổi phiên bản JRE thành 1.5.

Cập nhật Eclipse đơn giản lên phiên bản mới nhất giải quyết vấn đề này.


Vâng, không. Tôi đang chạy Neon, cài đặt không gian làm việc của tôi đều là 1.8, nhưng khi tôi nhập (hoặc cập nhật) một dự án Maven, Eclipse nhất quyết sử dụng J2SE-1.5.
Antares42

@ Antares42 bạn có thể xây dựng từ dòng lệnh mà không gặp vấn đề gì không? Bạn đang sử dụng phiên bản m2e nào?
user902383 21/02/17

1
Tôi có thể xây dựng bằng dòng lệnh (hay đúng hơn là "Run as -> Maven build ...") mà không gặp vấn đề gì. Nhưng ngay sau khi tôi thực hiện "Maven -> Cập nhật dự án", tôi nhận được các thư viện JRE như đã đề cập và Eclipse không thể xây dựng dự án. Tuy nhiên, tôi vẫn có thể xây dựng bằng Maven. Khi tôi thêm một thuộc maven.compiler.sourcetính như đã đề cập trong câu trả lời ở trên, mọi thứ đều hoạt động tốt. Phiên bản m2e của tôi là 1.7.1-20161104-1805.
Antares42

1

Trong trường hợp của tôi (JBoss Developer Studio cũ), vấn đề là môi trường JRE không bao gồm 1.8 (chỉ 1.7). Khi tôi chuyển maven-compiler-pluginphiên bản sang 1.7 và thực hiện dự án cập nhật maven, nó đã cập nhật thư viện hệ thống Eclipse JRE lên 1.7. nhập mô tả hình ảnh ở đây

Vì vậy, giải pháp là tải phiên bản IDE mới hơn bao gồm môi trường JRE tích hợp sẵn 1.8 hoặc mới hơn hoặc cố gắng cài đặt nó theo cách thủ công (xem https://stackoverflow.com/a/35204314 )


0

Tôi cho phép mình cập nhật chủ đề đó bằng Java 11.

Tôi đã cài đặt OpenJDK11 trên máy tính của mình và tôi muốn sử dụng nó trong một ứng dụng.

Tôi đã gặp sự cố vì Eclipse sẽ luôn thay đổi JRE của tôi thành JavaSE-1.5 khi tôi cập nhật dự án của mình với Maven.

Tôi đã thiết lập mọi thứ như bạn nói, nhưng tôi luôn trực tiếp chọn trong Đường dẫn xây dựng Java "java-11-openjdk.x86_64" làm một trong các JRE Alternante của tôi. Tôi đã khắc phục sự cố của mình bằng cách chọn trong "Môi trường thực thi" JavaSE-10 (nhưng bạn phải nhấp đúp vào nó và sau đó chọn làm JRE tương thích với phiên bản OpenJDK11 của bạn) như được hiển thị trên hình. Thiết lập môi trường thực thi

Dự án sẽ sử dụng Java 11 nhờ đó (hình) nhưng bạn phải viết 10 cho phiên bản java trong pom.xml và cũng đặt java 10 trên các khía cạnh của dự án.


0

Tôi đã giải quyết sự cố khi cài đặt bản cập nhật nhật thực "JAVA 12" từ thị trường. Nó làm cho nhật thực của tôi đi từ Kepler đến Luna.

Sau đó, tôi đã có thể đặt 1.8 làm JDK tiêu chuẩn, khắc phục sự cố "cập nhật maven".


-3

Tôi đã thay đổi Eclipse từ kepler thành neon và sau đó cập nhật dự án của mình bằng Maven -> Cập nhật dự án.

Khi sử dụng trang web của chúng tôi, bạn xác nhận rằng bạn đã đọc và hiểu Chính sách cookieChính sách bảo mật của chúng tôi.
Licensed under cc by-sa 3.0 with attribution required.