2.1 plugin tài nguyên sao chép maven-resources-plugin

Nếu bạn đang xây dựng một ứng dụng web, thì bạn sẽ chỉ có một loạt các tài nguyên khác nhau trong đó. Đây là các thư viện jar, jsp servlet, tệp cài đặt. Và tất nhiên, đây là một loạt các tệp tĩnh như html, css, jscũng như nhiều hình ảnh khác nhau.

Theo mặc định, khi xây dựng một dự án, Maven sẽ chỉ sao chép tất cả các tệp của bạn từ thư mục src/main/resourcessang thư mục đích. Nếu bạn muốn thay đổi hành vi này, plugin sẽ giúp bạn maven-resources-plugin.

Mã mẫu cho một plugin như vậy:

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.6</version>
    <executions>
        <execution>
            <id>copy-resources</id>
            <phase>validate</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>
                   ${basedir}/target/resources
                </outputDirectory>
                <resources>
                    <resource>  instructions for copying a resource 1 </resource>
                    <resource>  instructions for copying a resource 2 </resource>
                    <resource>  instructions for copying a resource N </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

Plugin này sẽ được gọi trong giai đoạn xác thực. Sử dụng thẻ, <outputDirectory>bạn có thể đặt thư mục nơi plugin sẽ sao chép các tài nguyên được chỉ định trong tệp <resources>. Và đây là nơi plugin có thể phát huy hết khả năng của nó.

2.2 Lọc tài nguyên bằng maven-resources-plugin

Tài nguyên plugin có thể được chỉ định không chỉ ở dạng tệp mà ngay lập tức ở dạng thư mục. Hơn nữa, một mặt nạ có thể được thêm vào thư mục, chỉ định những tệp nào từ nó sẽ được đưa vào tài nguyên này.

Ví dụ:


            <resource>
                <directory>src/main/resources/images</directory>
                <includes>
                     <include>**/*.png</include>
                </includes>
            </resource>

Hai dấu sao dưới dạng mặt nạ đại diện cho bất kỳ số lượng thư mục nào . Trong ví dụ trên, tất cả các tệp png có trong thư mục src/main/resources/images(và các thư mục con của nó) sẽ được lấy làm dữ liệu tài nguyên.

Nếu bạn muốn loại trừ một số tệp, bạn có thể sử dụng tệp exclude. Ví dụ:

<resource>
    <directory>src/main/resources/images</directory>
    <includes>
        <include>**/*.png</include>
    </includes>
    <excludes>
         <exclude>old/*.png</exclude>
    </excludes>
</resource>

Các thẻ được áp dụng tuần tự: đầu tiên, các tệp bao gồm được chỉ định trong các tệp bao gồm sẽ được thêm vào tài nguyên và sau đó các tệp loại trừ sẽ bị loại khỏi danh sách này.

Nhưng đó không phải là tất cả. Plugin có thể xem các tệp bên trong (tất nhiên nếu chúng là văn bản). Và, ví dụ, thêm application.propertiesphiên bản lắp ráp cần thiết vào tệp. Để plugin xử lý nội dung của tệp, bạn cần chỉ định tham số <filtering>true</filtering>.

Ví dụ:

<resource>
    <directory>src/main/resources/properties</directory>
    <filtering>true</filtering>
    <includes>
        <include>**/*. properties </include>
    </includes>
</resource>

Thông tin chi tiết về plugin này có thể được tìm thấy tại liên kết: https://maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

2.3 plugin bao gồm nguồn maven-source-plugin

Một plugin hữu ích khác - maven-source-plugincho phép bạn đưa mã nguồn của các tệp java của mình vào tập hợp. Để làm gì?

Vấn đề là ngoài các ứng dụng web, một số lượng rất lớn các thư viện được lắp ráp bằng Maven. Rất nhiều dự án Java tuân theo khái niệm mã nguồn mở và được phân phối cho cộng đồng Java bằng các nguồn riêng của chúng.

Tại sao bạn cần một plugin riêng biệt? Tại sao bạn không thể sao chép nguồn và đó là nó?

Đầu tiên, trong bất kỳ dự án phức tạp nào, các nguồn có thể được lưu trữ ở một số nơi.

Thứ hai, việc tạo nguồn dựa trên thông số kỹ thuật xml thường được sử dụng, những nguồn như vậy cũng cần được đưa vào hợp ngữ.

Và thứ ba, bạn có thể quyết định không bao gồm bất kỳ tệp đặc biệt bí mật nào trong assembly của mình.

Một ví dụ về việc sử dụng plugin maven-source-plugin:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-source-plugin</artifactId>
    <version>2.2.1</version>
    <executions>
        <execution>
            <id>attach-sources</id>
            <phase>verify</phase>
            <goals>
                <goal>jar</goal>
            </goals>
        </execution>
    </executions>
</plugin>

2.4 plugin sao chép phụ thuộc maven-dependency-plugin

Bạn cũng có thể cần sao chép các phụ thuộc (thư viện) một cách thông minh khi xây dựng một dự án. Một plugin được sử dụng cho việc này maven-dependency-plugin.

Ví dụ:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-dependency-plugin</artifactId>
    <version>2.5.1</version>
    <configuration>
        <outputDirectory>
            ${project.build.directory}/lib/
        </outputDirectory>
    </configuration>
    <executions>
        <execution>
            <id>copy-dependencies</id>
            <phase>package</phase>
            <goals>
                <goal>copy-dependencies</goal>
            </goals>
        </execution>
    </executions>
</plugin>

Trong ví dụ này, hành vi mặc định của plugin được viết - sao chép các thư viện sang tệp ${project.build.directory}/lib.

Phần thực thi nói rằng plugin sẽ được gọi trong giai đoạn xây dựng - gói, mục tiêu - phụ thuộc vào bản sao.

Nói chung, plugin này có một bộ mục tiêu khá lớn, đây là những mục tiêu phổ biến nhất:

1 phụ thuộc: phân tích phân tích phụ thuộc (đã sử dụng, chưa sử dụng, đã chỉ định, chưa xác định)
2 phụ thuộc: phân tích-trùng lặp xác định các phụ thuộc trùng lặp
3 phụ thuộc: giải quyết độ phân giải (định nghĩa) của tất cả các phụ thuộc
4 phụ thuộc: giải quyết-plugin quyền (định nghĩa) của tất cả các plugin
5 phụ thuộc: cây hiển thị cây phụ thuộc

Bạn cũng có thể thiết lập thêm các thông số trong phần cấu hình:

1 thư mục đầu ra Thư mục nơi phụ thuộc sẽ được sao chép
2 overWriteRelease Gắn cờ để ghi đè lên các phần phụ thuộc khi tạo bản phát hành
3 overWriteẢnh chụp nhanh Gắn cờ để ghi đè lên các phần phụ thuộc không phải đầu cuối có SNAPSHOT
4 overWriteIfMới hơn Gắn cờ để ghi đè thư viện bằng các phiên bản mới hơn

Ví dụ:


<configuration>
    <outputDirectory>
         ${project.build.directory}/lib/
    </outputDirectory>
    <overWriteReleases>false</overWriteReleases>
    <overWriteSnapshots>false</overWriteSnapshots>
    <overWriteIfNewer>true</overWriteIfNewer>
 </configuration>

Theo mặc định <overWriteReleases>, và <overWriteSnapshots>là sai, vì <overWriteIfNewer>là đúng.