maven打包插件的使用(maven-compiler-plugin、maven-dependency-plugin、maven-jar-plugin、maven-resources-plugin)
最近開發(fā)的產(chǎn)品,我們是有四五個(gè)maven模塊,開發(fā)階段一直是在eclipse中運(yùn)行的,然后快發(fā)版的時(shí)候,需要把這些項(xiàng)目打成jar包,通過命令去啟動,那首先就得把這些模塊項(xiàng)目打包,或者拷貝一些資源文件等等。
1.maven打包
首先在pom文件中加上build屬性,和dependencies是同級的:
<build> <!--打包出來的文件名,可以不填寫,有默認(rèn)值--> <finalName>Test</finalName> <plugins> <!--這塊寫插件--> </plugins> <build>
2.maven-compiler-plugin
編譯插件,可能會用到的一些配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.8</source> <target>1.8</target> </configuration> </plugin>
3.maven-jar-plugin
打jar包的插件,把整個(gè)maven工程打成jar包,可能會用到的一些配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <version>2.4</version> <configuration> <archive> <!-- 生成的jar中,包含pom.xml和pom.properties這兩個(gè)文件 --> <addMavenDescriptor>true</addMavenDescriptor> <!-- 生成MANIFEST.MF的設(shè)置 --> <manifest> <!--這個(gè)屬性特別關(guān)鍵,如果沒有這個(gè)屬性,有時(shí)候我們引用的包maven庫 下面可能會有多個(gè)包,并且只有一個(gè)是正確的,其余的可能是帶時(shí)間戳的, 此時(shí)會在classpath下面把那個(gè)帶時(shí)間戳的給添加上去,然后我們 在依賴打包的時(shí)候,打的是正確的,所以兩頭會對不上,報(bào)錯(cuò)。--> <useUniqueVersions>false</useUniqueVersions> <!-- 為依賴包添加路徑, 這些路徑會寫在MANIFEST文件的Class-Path下 --> <addClasspath>true</addClasspath> <!-- 這個(gè)jar所依賴的jar包添加classPath的時(shí)候的前綴,如果這個(gè) jar本身和依賴包在同一級目錄,則不需要添加--> <classpathPrefix>lib/</classpathPrefix> <!-- jar啟動入口類--> <mainClass>com.test.Test</mainClass> </manifest> <manifestEntries> <!-- 在Class-Path下添加配置文件的路徑 --> <Class-Path>../config/</Class-Path> <!-- 假如這個(gè)項(xiàng)目可能要引入一些外部資源,但是你打包的時(shí)候并不想把 這些資源文件打進(jìn)包里面,這個(gè)時(shí)候你必須在這邊額外指定一些這些資源 文件的路徑,這個(gè)位置指定的話,要根據(jù)你預(yù)期的這些位置去設(shè)置,我這邊 所有jar都在lib下,資源文件都在config下,lib和config是同級的 --> <!-- 同時(shí)還需要注意另外一個(gè)問題,假如你的pom文件里面配置了 <scope>system</scope>,就是你依賴是你本地的資源,這個(gè)時(shí)候使用 這個(gè)插件,classPath里面是不會添加,所以你得手動把這個(gè)依賴添加進(jìn) 這個(gè)地方,用空格隔開就行--> </manifestEntries> </archive> <!-- jar包的位置--> <outputDirectory>${project.build.directory}/lib</outputDirectory> <includes> <!-- 打jar包時(shí),只打包c(diǎn)lass文件 --> <!-- 有時(shí)候可能需要一些其他文件,這邊可以配置,包括剔除的文件等等--> <include>**/*.class</include> </includes> </configuration> </plugin>
4.maven-dependency-plugin
用來拷貝項(xiàng)目所有依賴的插件,可能會用到的一些配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy-dependencies</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <!-- 拷貝項(xiàng)目依賴包到lib/目錄下 --> <outputDirectory>${project.build.directory}/lib</outputDirectory> <!-- 間接依賴也拷貝 --> <excludeTransitive>false</excludeTransitive> <!-- 帶上版本號 --> <stripVersion>false</stripVersion> </configuration> </execution> </executions> </plugin>
5.maven-resources-plugin
用來拷貝項(xiàng)目中的一些資源文件,可能會用到的一些配置如下:
<plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.6</version> <executions> <!-- 一個(gè)execution就是一個(gè)目標(biāo)輸入位置,如果想把各種資源拆開放的話,就 可以創(chuàng)建多個(gè)execution,一個(gè)資源文件可以被拷貝多份 --> <execution> <id>copy-resources</id> <phase>package</phase> <goals> <goal>copy-resources</goal> </goals> <configuration> <encoding>UTF-8</encoding> <!-- 資源文件的輸出目錄 --> <outputDirectory>{project.build.directory}/config</outputDirectory> <resources> <!-- 資源文件的原始目錄,有多個(gè)的話就多配幾個(gè) --> <resource> <!-- 原始目錄 --> <directory>src/main/resources</directory> <!-- 是否使用過濾器,如果是的話,需要配置一下才行 這個(gè)后續(xù)再研究,這邊沒有使用到 --> <filtering>true</filtering> <!-- 包含哪些文件以及去除調(diào)哪些文件等等 --> <includes> <include>**/*.*</include> </includes> <excludes> <exclude>**/*.json</exclude> </excludes> </resource> </resources> </configuration> </execution> </executions> </plugin>
關(guān)于資源文件拷貝,注意一個(gè)小問題,平時(shí)用eclipse開發(fā)的話,默認(rèn)的classPath其實(shí)就是target/classes,默認(rèn)情況下,eclipse也會把一些在src/main/resources下的資源文件拷貝到這個(gè)目錄下,但是如果你配了上述資源拷貝插件,只會按你配置的來,我配置上述插件是為了在非eclipse環(huán)境下運(yùn)行的,但是這樣影響到了eclipse的運(yùn)行,所以呢,需要額外再配置一個(gè)execution,拷貝到classes目錄下即可
注意:上面說的這個(gè),在IDEA中不會有這個(gè)問題,因?yàn)镮DEA每次啟動都會自己build一下,會完全一部分事情,保證項(xiàng)目能夠運(yùn)行。
以上就是這4個(gè)插件,后續(xù)如果還有其余插件或者這些插件中一些新內(nèi)容,會及時(shí)添加。關(guān)于一些文件的輸出目錄,一定要根據(jù)自己的需求來,先明白自己想要什么,再去配置,或者兩者互相迭代吧。
maven-war-plugin,war包打包插件
一般也不用指定,默認(rèn)都會用的。只不過在針對一些快照版本的依賴包,打出來的文件,WEB-INFO/lib下面的jar包,都會帶一些時(shí)間戳,經(jīng)過下面的配置,打出來的就不帶時(shí)間戳了。
<plugin> <artifactId>maven-war-plugin</artifactId> <version>2.6</version> <configuration> <outputFileNameMapping>@{artifactId}@-@{baseVersion}@.@{extension}@</outputFileNameMapping> </configuration> </plugin>
到此這篇關(guān)于maven打包插件的使用(maven-compiler-plugin、maven-dependency-plugin、maven-jar-plugin、maven-resources-plugin)的文章就介紹到這了,更多相關(guān)maven打包插件內(nèi)容請搜索腳本之家以前的文章或繼續(xù)瀏覽下面的相關(guān)文章希望大家以后多多支持腳本之家!
相關(guān)文章
spring如何動態(tài)指定具體實(shí)現(xiàn)類
這篇文章主要為大家詳細(xì)介紹了spring如何動態(tài)指定具體實(shí)現(xiàn)類,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2016-10-10java實(shí)現(xiàn)猜數(shù)字小游戲(Swing版)
這篇文章主要介紹了java實(shí)現(xiàn)猜數(shù)字小游戲,Swing編程版的猜數(shù)字游戲,文中示例代碼介紹的非常詳細(xì),具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2020-05-05Java貪心算法之Prime算法原理與實(shí)現(xiàn)方法詳解
這篇文章主要介紹了Java貪心算法之Prime算法原理與實(shí)現(xiàn)方法,簡單描述了Prime算法的概念、原理、實(shí)現(xiàn)與使用技巧,需要的朋友可以參考下2017-09-09Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫詳解
這篇文章主要為大家詳細(xì)介紹了Java執(zhí)行SQL腳本文件到數(shù)據(jù)庫的相關(guān)方法,具有一定的參考價(jià)值,感興趣的小伙伴們可以參考一下2017-06-06SpringBoot啟動報(bào)錯(cuò)Failed to determine a suitable driver class
這篇文章主要介紹了SpringBoot啟動報(bào)錯(cuò)Failed to determine a suitable driver class,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2019-05-05