使用Maven打包時(shí)包含資源文件和源碼到j(luò)ar的方法
Maven打包時(shí)包含資源文件和源碼到j(luò)ar
在使用Maven打包時(shí),我們發(fā)現(xiàn)最終打包之后jar中只有已經(jīng)編譯完成的代碼class,資源文件都沒了,如果有資源文件需要打包進(jìn)jar的話,直接打包jar無法正常工作。
其實(shí),在pom.xml中配置一下<build>節(jié)點(diǎn)即可實(shí)現(xiàn)把資源打包進(jìn)來的操作。
在<build>中添加以下內(nèi)容
<resources> ?? ?<resource> ?? ??? ?<directory>${basedir}/src/main/resources</directory> ?? ??? ?<includes> ?? ??? ??? ?<include>**/*.*</include> ?? ??? ?</includes> ?? ??? ?<filtering>false</filtering> ?? ?</resource> ? ?? ?<resource> ?? ??? ?<directory>${basedir}/src/main/java</directory> ?? ??? ?<includes> ?? ??? ??? ?<include>**/*.*</include> ?? ??? ?</includes> ?? ??? ?<excludes> ?? ??? ??? ?<exclude>**/*.java</exclude> ?? ??? ?</excludes> ?? ??? ?<filtering>false</filtering> ?? ?</resource> </resources>
可以看到,添加的<resources>節(jié)點(diǎn)中有兩個(gè)<resource>子節(jié)點(diǎn),分別配置了兩個(gè)不同的地方的內(nèi)容打包進(jìn)jar(一般資源文件放在項(xiàng)目resource文件夾和源代碼文件夾里面),其中每一個(gè)<resource>節(jié)點(diǎn)中的內(nèi)容
意義如下
<directory>
為被打包的資源文件的路徑,${basedir}表示這個(gè)項(xiàng)目的根目錄。<includes>
被包含的文件,里面的<include>**/*.*</include>表示包含其中的所有文件和文件夾。<filtering>
是否過濾資源文件,默認(rèn)false。<excludes>
要排除的文件,上面的配置內(nèi)容中排除了所有的java源代碼文件防止把源代碼也打包進(jìn)去了。
如果在別的地方有資源文件,可以自己再添加<resource>節(jié)點(diǎn),格式按照這個(gè)來。
需要說明的是一些jar外部包因?yàn)榘琷ava doc注釋,所以也需要將源代碼文件包含進(jìn)去。
這樣的話也很簡單,把上面的第二個(gè)<resource>節(jié)點(diǎn)中的整個(gè)<excludes>節(jié)點(diǎn)去掉即可。(即不配置排除java源代碼文件)
maven打包時(shí)包含源碼的問題
由于jar包和項(xiàng)目分開打包,并且jar包打包后不會帶注釋,會對代碼調(diào)試增加難度,所以增加了jar包攜帶源碼的方式,解決方式如下
1.maven-source-plugin提供項(xiàng)目自動(dòng)將源碼打包并發(fā)布的功能
在需要發(fā)布源碼項(xiàng)目的pom.xml文件中添加如下代碼即可:
<!-- Source attach plugin --> ?<build> ? ? ? <plugins> ? ? ? ? ? <plugin> ? ? ? ? ? ? ? <groupId>org.apache.maven.plugins</groupId> ? ? ? ? ? ? ? <artifactId>maven-source-plugin</artifactId> ? ? ? ? ? ? ? <executions> ? ? ? ? ? ? ? ? ? <execution> ? ? ? ? ? ? ? ? ? ? ? <id>attach-sources</id> ? ? ? ? ? ? ? ? ? ? ? <goals> ? ? ? ? ? ? ? ? ? ? ? ? ? <goal>jar</goal> ? ? ? ? ? ? ? ? ? ? ? </goals> ? ? ? ? ? ? ? ? ? </execution> ? ? ? ? ? ? ? </executions> ? ? ? ? ? </plugin> ? ? ? </plugins> ? </build>
2.刪除target文件夾
3.mvan執(zhí)行
- 執(zhí)行 mvn install,maven會自動(dòng)將source install到repository 。
- 執(zhí)行 mvn deploy,maven會自動(dòng)將source deploy到remote-repository 。
- 執(zhí)行 mvn source:jar,單獨(dú)打包源碼。
以上為個(gè)人經(jīng)驗(yàn),希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
java讀取文件內(nèi)容,解析Json格式數(shù)據(jù)方式
這篇文章主要介紹了java讀取文件內(nèi)容,解析Json格式數(shù)據(jù)方式,具有很好的參考價(jià)值,希望對大家有所幫助。如有錯(cuò)誤或未考慮完全的地方,望不吝賜教2021-09-09Java線程狀態(tài)轉(zhuǎn)換關(guān)系實(shí)例解析
這篇文章主要介紹了Java線程狀態(tài)轉(zhuǎn)換關(guān)系實(shí)例解析,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-08-08java jni調(diào)用c函數(shù)實(shí)例分享(java調(diào)用c函數(shù))
Java代碼中調(diào)用C/C++代碼,當(dāng)然是使用JNI,JNI是Java native interface的簡寫,可以譯作Java原生接口,下面看實(shí)例吧2013-12-12Java.lang.Long.parseLong()方法詳解及示例
這個(gè)java.lang.Long.parseLong(String s) 方法解析字符串參數(shù)s作為有符號十進(jìn)制長,下面這篇文章主要給大家介紹了關(guān)于Java.lang.Long.parseLong()方法詳解及示例的相關(guān)資料,需要的朋友可以參考下2023-01-01Java數(shù)據(jù)結(jié)構(gòu)之隊(duì)列與OJ題
這篇文章主要介紹了Java數(shù)據(jù)結(jié)構(gòu)之隊(duì)列與OJ題,本文章先是對隊(duì)列進(jìn)行介紹,后又介紹了四道OJ相關(guān)的題目,來使其深入理解,需要的朋友可以參考下2023-01-01Java實(shí)現(xiàn)定時(shí)任務(wù)的方法詳解
大家都用過鬧鐘,鬧鐘可以說是一種定時(shí)任務(wù)。那么,在?Java?中,如何實(shí)現(xiàn)這樣的功能呢?即如何實(shí)現(xiàn)定時(shí)任務(wù)呢?本文就來詳細(xì)和大家聊聊2022-10-10如何利用Java?AWT?創(chuàng)建一個(gè)簡易計(jì)算器
這篇文章主要介紹了如何利用Java?AWT?創(chuàng)建一個(gè)簡易計(jì)算器,AWT?是一個(gè)有助于構(gòu)建?GUI?的?API?基于?java?應(yīng)用程序,下面關(guān)于其相關(guān)資料實(shí)現(xiàn)計(jì)算器的內(nèi)容詳細(xì),需要的朋友可以參考一下2022-03-03