1. 程式人生 > >maven打包額外的資源文件

maven打包額外的資源文件

code true maven false 配置文件 利用 ons apache spa

在用Maven打包的時候發現,有一些資源文件打包不到jar包中,於是了解了一下Maven的打包配置,最後得到了解決問題的辦法。

Maven資源文件的默認約定

構建Maven項目的時候,如果沒有進行特殊的配置,Maven會按照標準的目錄結構,去查找和處理各種類型的文件,這就是Maven遵循的約定優於配置原則。

Maven項目的標準目錄結構

src
— — main
— — java         源文件 
— — — — resources    資源文件
— — — — filters
資源過濾文件 — — — — config 配置文件 — — — — scripts 腳本文件 — — — — webapp web應用文件 — — test — — — — java 測試源文件 — — — — resources 測試資源文件 — — — — filters
測試資源過濾文件 — — it 集成測試 — — assembly assembly descriptors — — site Site target — — generated-sources — — classes — — generated-test-sources — — test-classes — — xxx.jar pom.xml LICENSE.txt
NOTICE.txt README.txt

src/main/java和src/test/java

這兩個目錄中的所有*.java文件會分別在compile和test-compile階段被編譯,編譯的結果會被分別放到target/classes和target/test-classes目錄中,但是這兩個目錄中的其他非*.java的文件都會被忽略掉。

src/main/resouces和src/test/resources

這兩個目錄中的文件也是會被分別復制到target/classes和target/test-classes目錄中。

target/clasess

打包插件默認會把這個目錄中的所有內容打入到jar包或者war包中。

Maven打額外資源文件的配置

資源文件是Java代碼中要使用的文件,代碼在執行的時候會到指定目錄去查找這些文件。一般情況下,我們用到的資源文件(各種xml,properties,xsd文件等)都放在src/mian/resources下,利用Maven打包的時候,Maven都能默認將這些資源文件打包到相應的jar包或者war包中。

但是有些時候,可能會把資源文件放到src/main/java下,比如說Mybatis的Mapper.xml文件就是和Mapper.java放在一起,也就導致了java文件能打到jar包中,Mapper.xml卻沒有打進jar包中。這時候,就需要在pom.xml中添加特定的配置來將這些資源文件能打進jar包或war包中。

配置有兩種方法,一是在<build>標簽節點下添加<resources>標簽節點,二是在<build>標簽節點下的<plugins>標簽節點中配置maven-resources-plugin等處理資源文件的插件。

<resources>標簽

<build>
    .......
      <resources>
        <resource>
            <directory>src/main/resources</directory>
            <excludes>
                <exclude>**/*.properties</exclude>
                <exclude>**/*.xml</exclude>
             </excludes>
            <filtering>false</filtering>
        </resource>
        <resource>
            <directory>src/main/java</directory>
            <includes>
                <include>**/*.properties</include>
                <include>**/*.xml</include>
            </includes>
            <filtering>false</filtering>
        </resource>
    </resources>
    ......
</build>

maven-resources-plugin插件

<plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.5</version>
    <executions>
        <execution>
            <id>copy-xmls</id>
            <phase>process-sources</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>                                  
                <outputDirectory>${basedir}/target/classes</outputDirectory>
                <resources>
                    <resource>
                        <directory>${basedir}/src/main/java</directory>
                        <includes>
                            <include>**/*.xml</include>
                        </includes>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

build-helper-maven-plugin插件

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>build-helper-maven-plugin</artifactId>
    <version>1.8</version>
    <executions>
        <execution>
            <id>add-resource</id>
            <phase>generate-resources</phase>
            <goals>
                <goal>add-resource</goal>
            </goals>
            <configuration>
                <resources>
                    <resource>
                        <directory>src/main/java</directory>
                        <includes>
                            <include>**/*.xml</include>
                        </includes>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

Maven排除資源文件的配置

前面說了,target/classes目錄中的資源文件會全部和class字節碼一起被打進jar包或war包中。這樣,當你希望有一些文件不被打包的時候,就需要額外去配置maven-jar-plugin插件了。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <excludes>
            <exclude>*.properties</exclude>
        </excludes>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>com.yanggb.main.HelloWorld</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

"可是怎麽辦好呢,看到你難過的時候我還是會很心疼。"

maven打包額外的資源文件