2017-09-14 21 views
13

Tôi đang xây dựng dự án của mình với maven và . Tôi đã thêm trong file pom.xml tôi:--add-modules chỉ khi biên soạn

<plugin> 
    <artifactId>maven-compiler-plugin</artifactId> 
    <version>${maven-compiler-plugin.version}</version> 
    <configuration> 
     <source>${java.version}</source> 
     <target>${java.version}</target> 
     <compilerArgs> 
      <arg>--add-modules</arg> 
      <arg>java.xml.bind</arg> 
     </compilerArgs> 
    </configuration> 
</plugin> 

Nhưng vẫn còn, để chạy các ứng dụng tôi phải chạy nó như thế này:

java -jar --add-modules java.xml.bind my-app.jar 

Có cách nào để xây dựng các ứng dụng, chạy từ dòng lệnh mà không cần --add-modules java.xml.bind đối số dòng lệnh java?

+0

những gì tôi nghĩ nhưng có lẽ sai, những gì bạn đã làm trong 'maven-compiler-plugin' chỉ dành cho trình biên dịch' javac' cũng được sử dụng bởi maven để biên dịch dự án của bạn, nhưng không phải cho thời gian chạy 'java', vì vậy bạn phải thêm' --add-modules 'đến java runtime' java'. – Tiina

+0

Đúng vậy, và đó là lý do tại sao tôi hỏi câu hỏi cách chạy mà không cần thêm '--add-modules'. – wbk

Trả lời

19

Tôi đã thực hiện this answer một thời gian trước đây, nơi tôi đã trả lời câu hỏi này dưới dạng thông tin bổ sung để hiển thị các gói không java.se trong Java-9 bằng Maven.

Phần được thêm cụ thể tập trung vào việc sử dụng phiên bản độc lập của các API java.xml.*. Để thích ứng với điều mà bạn có thể bắt đầu sử dụng sự phụ thuộc vào jaxb-api:2.3.0 có thể được nạp dưới dạng một mô-đun và có thể được thực thi từ đường dẫn lớp. Sự thay đổi bạn cần phải thực hiện là thêm những điều sau đây vào danh sách phụ thuộc của bạn:

<dependency> 
    <groupId>javax.xml.bind</groupId> 
    <artifactId>jaxb-api</artifactId> 
    <version>2.3.0</version> 
</dependency> 

Bằng cách này bạn đảm bảo chuyển sang độc API cho các mô-đun cũng như di chuyển ra khỏi một deprecated piece of code.