maven打包額外的資源文件


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

 

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


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM