CodeGym/Java Course/Module 3 a ɛto so abien/在構建 Maven 項目時管理文件

在構建 Maven 項目時管理文件

開放

2.1 maven-resources-plugin複製資源插件

如果您正在構建 Web 應用程序,那麼您將在其中擁有一堆不同的資源。這些是 jar 庫、jsp servlet 和設置文件。當然,這是一堆html, css,之類的靜態文件js,還有各種圖片。

默認情況下,在構建項目時,Maven 會簡單地將所有文件從文件夾複製src/main/resources到目標目錄。如果您想更改此行為,那麼該插件會幫助您maven-resources-plugin

此類插件的示例代碼:

<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>

該插件將在驗證階段調用。使用該標籤,<outputDirectory>您可以設置插件複製<resources>. 這就是插件可以發揮最大作用的地方。

2.2 使用 maven-resources-plugin 過濾資源

插件資源不僅可以以文件的形式指定,還可以立即以目錄的形式指定。此外,可以向目錄添加一個掩碼,指定該目錄中的哪些文件將包含在該資源中。

例子:


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

兩個星號作為掩碼代表任意數量的目錄。在上面的示例中,目錄src/main/resources/images(及其子目錄)中包含的所有 png 文件都將作為資源數據。

如果你想排除一些文件,你可以使用exclude. 例子:

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

標籤按順序應用:首先,包含文件中指定的包含文件將被添加到資源中,然後排除文件將從該列表中排除。

但這還不是全部。該插件可以查看文件內部(當然,如果它們是文本)。並且,例如,將application.properties所需版本的程序集添加到文件中。為了讓插件處理文件的內容,您需要指定參數<filtering>true</filtering>.

例子:

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

有關此插件的更多詳細信息,請訪問以下鏈接: https: //maven.apache.org/plugins/maven-resources-plugin/examples/filter.html

2.3 maven-source-plugin源碼包含插件

另一個有用的插件 -maven-source-plugin允許您在程序集中包含 java 文件的源代碼。為了什麼?

問題是,除了 Web 應用程序之外,還有大量的庫是使用 Maven 組裝的。許多 Java 項目遵循開源的概念,並以自己的源代碼分發到 Java 社區。

為什麼需要一個單獨的插件?為什麼你不能只複製源代碼,僅此而已?

首先,在任何復雜的項目中,源代碼都可以存儲在多個地方。

其次,經常使用基於xml規範的源碼生成,這樣的源碼也需要包含在程序集中。

第三,您可以決定不在程序集中包含任何特別機密的文件。

使用 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 maven-dependency-plugin依賴複製插件

您可能還需要在構建項目時巧妙地複制依賴項(庫)。為此使用了一個插件maven-dependency-plugin

例子:

<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>

在此示例中,寫入了插件的默認行為 - 將庫複製到${project.build.directory}/lib.

執行部分說明插件將在構建階段調用 - 包、目標 - 複製依賴項。

一般來說,這個插件有相當多的目標,這裡是最流行的:

1個 依賴:分析 依賴性分析(使用過、未使用過、指定過、未指定過)
2個 依賴:分析重複 識別重複依賴
3個 依賴:解決 所有依賴項的解析(定義)
4個 依賴:解決插件 所有插件的權限(定義)
5個 依賴:樹 顯示依賴樹

您還可以在配置部分設置其他參數:

1個 輸出目錄 將復制依賴項的目錄
2個 覆蓋發布 創建發佈時標記以覆蓋依賴項
3個 覆蓋快照 標記以覆蓋具有 SNAPSHOT 的非終端依賴項
4個 overWriteIfNewer 標記以用較新版本覆蓋庫

例子:


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

默認情況下<overWriteReleases>,and<overWriteSnapshots>為假,for<overWriteIfNewer>為真。

留言
  • 受歡迎
你必須登入才能留言
此頁面尚無留言