Tạo một JAR có thể thực thi được với các phụ thuộc bằng Maven

Tạo một JAR có thể thực thi được với các phụ thuộc bằng Maven
Tạo một JAR có thể thực thi được với các phụ thuộc bằng Maven

Đóng gói các dự án Maven vào một JAR có thể thực thi được

Khi làm việc với các dự án Java, thường cần đóng gói ứng dụng của bạn thành một tệp JAR có thể thực thi được để dễ dàng phân phối. Maven, một công cụ tự động hóa xây dựng mạnh mẽ, cho phép các nhà phát triển đưa tất cả các phần phụ thuộc cần thiết vào JAR đầu ra duy nhất này.

Bài viết này sẽ hướng dẫn bạn các bước cần thiết để định cấu hình dự án Maven của bạn nhằm đưa tất cả các JAR phụ thuộc vào JAR thực thi cuối cùng của bạn. Bằng cách làm theo những hướng dẫn này, bạn sẽ đơn giản hóa quy trình triển khai và đảm bảo ứng dụng của bạn chạy trơn tru trên các môi trường khác nhau.

Yêu cầu Sự miêu tả
<plugin> Xác định plugin Maven để sử dụng trong quá trình xây dựng. Các plugin có thể thực thi các tác vụ cụ thể như biên dịch mã hoặc đóng gói dự án.
<groupId> Chỉ định mã định danh nhóm cho dự án Maven, thường là tên miền đảo ngược.
<artifactId> Xác định mã định danh của tạo phẩm, đó là tên của dự án.
<version> Cho biết phiên bản hiện tại của dự án.
<build> Chứa cấu hình bản dựng cho dự án, bao gồm các plugin và tài nguyên.
<descriptorRef> Tham chiếu một bộ mô tả được xác định trước để sử dụng Plugin hội đồng Maven, chẳng hạn như "jar-with-dependency".
<mainClass> Chỉ định lớp chính sẽ được thực thi khi tệp JAR được chạy.
<execution> Xác định khối thực thi trong plugin, chỉ định các tác vụ sẽ được thực hiện ở các giai đoạn xây dựng khác nhau.
mvn clean package Lệnh dọn dẹp dự án và đóng gói nó vào một tệp JAR, bao gồm tất cả các phần phụ thuộc.
java -jar target/...jar Lệnh chạy tệp JAR được tạo, chỉ định đường dẫn đến JAR.

Tạo và chạy một JAR có thể thực thi được với Maven

Các tập lệnh được cung cấp ở trên minh họa cách định cấu hình dự án Maven để đóng gói tất cả các phần phụ thuộc của nó vào một tệp JAR thực thi duy nhất. Kịch bản đầu tiên là Maven pom.xml tập tin chứa cấu hình của dự án. Trong tập tin này, <plugin> thẻ được sử dụng để xác định Plugin hội Maven. Plugin này rất quan trọng để tạo một JAR thực thi bao gồm tất cả các phần phụ thuộc. Các <descriptorRefs> thẻ trong cấu hình plugin chỉ định việc sử dụng jar-with-dependencies bộ mô tả, đảm bảo rằng tất cả các phần phụ thuộc của dự án được đóng gói vào tệp JAR cuối cùng. Các <mainClass> gắn thẻ bên trong <manifest> rất cần thiết vì nó cho Maven biết lớp nào chứa phương thức chính sẽ chạy khi JAR được thực thi.

Các <execution> khối bên trong cấu hình plugin là nơi hành động xảy ra. Nó chỉ định rằng mục tiêu của plugin single phải được thực hiện trong thời gian số 8 giai đoạn của vòng đời xây dựng. Đây là yếu tố kích hoạt việc tạo tệp JAR có phần phụ thuộc. Kịch bản thứ hai là một hướng dẫn dòng lệnh đơn giản: mvn clean package. Lệnh này sẽ dọn dẹp dự án (loại bỏ các tạo phẩm xây dựng trước đó), biên dịch mã nguồn, chạy thử nghiệm và đóng gói dự án vào tệp JAR. Tệp JAR cuối cùng sẽ được đặt trong thư mục target thư mục của dự án và được đặt tên theo artifactIdversion quy định trong pom.xml.

Tạo một tệp JAR có thể thực thi được với các phần phụ thuộc bằng Maven

Tập lệnh cấu hình Maven

<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.example</groupId>
    <artifactId>my-app</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>3.3.0</version>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.example.MainClass</mainClass>
                        </manifest>
                    </archive>
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

Chạy lệnh Maven để đóng gói JAR

Hướng dẫn dòng lệnh

mvn clean package
# This command will compile the code, run the tests, and create the JAR file
# The JAR file will include all dependencies specified in the pom.xml
# It will be located in the target directory of the project
# The final JAR file will be named my-app-1.0-SNAPSHOT-jar-with-dependencies.jar

# To run the JAR file, use the following command:
java -jar target/my-app-1.0-SNAPSHOT-jar-with-dependencies.jar
# Ensure that the mainClass specified in the pom.xml is correct
# This will start your application with all dependencies included

Kỹ thuật Maven nâng cao cho các phụ thuộc đóng gói

Ngoài cấu hình cơ bản để tạo JAR thực thi bằng Maven, còn có các kỹ thuật bổ sung có thể nâng cao quá trình xây dựng của bạn. Một kỹ thuật như vậy liên quan đến việc sử dụng shade plugin thay vì assembly cắm vào. Plugin Maven Shade cung cấp nhiều tính năng nâng cao hơn để tạo uber-JAR (bao gồm các JAR có phần phụ thuộc). Nó cho phép bạn đổi tên các gói để tránh xung đột đường dẫn lớp và cung cấp khả năng xử lý tốt hơn cho các lớp và tài nguyên trùng lặp. Ngoài ra, nó còn cung cấp khả năng kiểm soát chi tiết về những phần phụ thuộc nào được đưa vào JAR cuối cùng.

Một khía cạnh quan trọng khác là quản lý kích thước tệp JAR của bạn. Các tệp JAR lớn có thể cồng kềnh và chậm khi truyền hoặc tải. Các maven-shade-plugin có thể giúp giải quyết vấn đề này bằng cách cho phép bạn loại trừ các tệp và lớp không cần thiết, do đó giảm kích thước của JAR cuối cùng. Bạn cũng có thể định cấu hình plugin để giảm thiểu JAR bằng cách xóa thông tin không cần thiết như các lớp không sử dụng hoặc tài nguyên dư thừa. Những cấu hình nâng cao này có thể đặc biệt hữu ích khi làm việc trên các dự án lớn có nhiều phụ thuộc.

Các câu hỏi và giải pháp phổ biến cho các JAR có thể thực thi của Maven

  1. Làm cách nào để chỉ định lớp chính trong JAR của tôi?
  2. Bạn có thể chỉ định lớp chính bằng cách sử dụng <mainClass> gắn thẻ trong <manifest> phần cấu hình plugin Maven.
  3. Làm cách nào tôi có thể loại trừ các phụ thuộc cụ thể khỏi JAR cuối cùng?
  4. Sử dụng excludes trong cấu hình plugin để chỉ định các phần phụ thuộc không được đưa vào JAR cuối cùng.
  5. Uber-JAR là gì?
  6. Uber-JAR là một tệp JAR không chỉ chứa mã được biên dịch của bạn mà còn chứa tất cả các phần phụ thuộc của nó.
  7. Làm cách nào để tránh xung đột đường dẫn lớp trong JAR của tôi?
  8. Các maven-shade-plugin cho phép bạn đổi tên các gói trong phần phụ thuộc để tránh xung đột.
  9. Làm cách nào để xử lý các lớp trùng lặp trong phần phụ thuộc?
  10. Cấu hình maven-shade-plugin để quản lý các lớp và tài nguyên trùng lặp bằng cách chỉ định cách xử lý các bản sao trong JAR cuối cùng.
  11. Tôi có thể chỉ bao gồm các tệp cụ thể từ một phần phụ thuộc không?
  12. Có, bạn có thể cấu hình maven-assembly-plugin hoặc maven-shade-plugin để chỉ bao gồm các tệp cụ thể từ một phần phụ thuộc.
  13. Làm cách nào để chạy JAR đóng gói?
  14. Sử dụng java -jar lệnh theo sau là đường dẫn đến tệp JAR của bạn.
  15. Làm cách nào để xác minh nội dung tệp JAR của tôi?
  16. Bạn có thể dùng jar -tf lệnh liệt kê nội dung của tệp JAR.
  17. Nếu tệp JAR của tôi quá lớn thì sao?
  18. Sử dụng maven-shade-plugin để loại trừ các tệp không cần thiết và giảm thiểu kích thước JAR.

Kết luận suy nghĩ về các JAR có thể thực thi của Maven

Việc tạo một JAR thực thi có các phần phụ thuộc bằng Maven sẽ đơn giản hóa quá trình triển khai cho các ứng dụng Java. Bằng cách cấu hình đúng cách pom.xml file và sử dụng các plugin như Maven Assembly Plugin hoặc Maven Shade Plugin, các nhà phát triển có thể đóng gói tất cả các phần phụ thuộc cần thiết vào một tệp JAR duy nhất. Cách tiếp cận này đảm bảo rằng ứng dụng có thể chạy liền mạch trong nhiều môi trường khác nhau, giúp việc phân phối và thực thi trở nên đơn giản. Làm theo các bước này sẽ giúp bạn quản lý các phần phụ thuộc của dự án một cách hiệu quả và tạo các tệp JAR có thể thực thi, đáng tin cậy.