java application maven項(xiàng)目打自定義zip包實(shí)例(推薦)
1.配置pom.xml文件,添加build節(jié)點(diǎn)
<build> <!-- 輸出的包名 --> <finalName>p2p</finalName> <sourceDirectory>src/main/java</sourceDirectory> <resources> <!-- 控制資源文件的拷貝(默認(rèn)復(fù)制到classes目錄,最后打進(jìn)jar包) --> <resource> <directory>src/main/resources</directory> <includes> <include>**/*.properties</include> <include>**/*.xml</include> </includes> <!-- 排除外置的配置文件(運(yùn)行時(shí)注釋上使IDE能讀取到配置文件;打包時(shí)放開注釋讓配置文件外置方便修改) --> <excludes> <exclude>config.properties</exclude> </excludes> </resource> <!-- 配置文件外置的資源(存放到config目錄,也是classpath路徑,下面會(huì)配置) --> <resource> <directory>src/main/resources</directory> <includes> <include>config.properties</include> </includes> <targetPath>${project.build.directory}/config</targetPath> </resource> </resources> <plugins> <!-- 設(shè)置編譯版本 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-compiler-plugin</artifactId> <version>3.1</version> <configuration> <source>1.7</source> <target>1.7</target> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 打包jar文件時(shí),配置manifest文件,加入lib包的jar依賴 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-jar-plugin</artifactId> <configuration> <archive> <!-- 清單文件,設(shè)置入口類和classpath --> <manifest> <mainClass>com.hdwang.Application</mainClass> <addClasspath>true</addClasspath> <classpathPrefix>lib/</classpathPrefix> </manifest> <!-- 給清單文件添加鍵值對,增加classpath路徑,這里將config目錄也設(shè)置為classpath路徑 --> <manifestEntries> <Class-Path>config/</Class-Path> </manifestEntries> </archive> <classesDirectory> </classesDirectory> </configuration> </plugin> <!-- 拷貝依賴的jar包到lib目錄 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-dependency-plugin</artifactId> <executions> <execution> <id>copy</id> <phase>package</phase> <goals> <goal>copy-dependencies</goal> </goals> <configuration> <outputDirectory> ${project.build.directory}/lib </outputDirectory> </configuration> </execution> </executions> </plugin> <!-- 解決資源文件的編碼問題 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-resources-plugin</artifactId> <version>2.5</version> <configuration> <encoding>UTF-8</encoding> </configuration> </plugin> <!-- 自定義打zip包 --> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>2.2.1</version> <configuration> <descriptors> <descriptor>src/main/assembly/assembly.xml</descriptor> </descriptors> </configuration> <executions> <execution> <id>make-assembly</id> <phase>package</phase> <goals> <goal>single</goal> </goals> </execution> </executions> </plugin> </plugins> </build>
這個(gè)pom配置文件中注意紅色字體部分,這是實(shí)現(xiàn)配置文件外置的關(guān)鍵配置,思路就是配置文件不打進(jìn)jar包,放置到外面,且將此文件夾設(shè)置為classpath,這樣子程序便可以通過根據(jù)classloader很方便地讀取到配置文件了。下面給出讀取配置文件的java代碼,在IDE運(yùn)行時(shí)和打包后,代碼都不用修改,因?yàn)榕渲梦募偰軓腸lasspath路徑中找到?。?!
工具包的maven信息
<dependency> <groupId>commons-configuration</groupId> <artifactId>commons-configuration</artifactId> <version>1.10</version> </dependency>
2.新建maven-assembly-plugin插件的配置文件assembly.xml,內(nèi)容如下
<assembly> <id>bin</id> <formats> <format>zip</format> </formats> <!-- 使用assembly拷貝依賴包 --> <!--<dependencySets>--> <!--<dependencySet>--> <!--<!– 是否包含自己(將項(xiàng)目生成的jar包也輸出到lib目錄) –>--> <!--<useProjectArtifact>false</useProjectArtifact>--> <!--<outputDirectory>lib</outputDirectory>--> <!--</dependencySet>--> <!--</dependencySets>--> <fileSets> <!-- 從目標(biāo)目錄拷貝文件去壓縮 --> <fileSet> <directory>target</directory> <includes> <include>*.jar</include> </includes> <outputDirectory>/</outputDirectory> </fileSet> <fileSet> <directory>target/lib</directory> <outputDirectory>/lib</outputDirectory> </fileSet> <fileSet> <directory>target/config</directory> <outputDirectory>/config</outputDirectory> </fileSet> <!-- 從源目錄拷貝文件去壓縮 --> <fileSet> <directory>src/main/run</directory> <includes> <include>*.sh</include> <include>*.cmd</include> </includes> <outputDirectory>/</outputDirectory> </fileSet> <fileSet> <directory>src/main</directory> <includes> <include>ReadMe.txt</include> </includes> <outputDirectory>/</outputDirectory> </fileSet> </fileSets> </assembly>
這個(gè)插件在package生命周期中運(yùn)行,執(zhí)行mvn package或者mvn install便可觸發(fā)此插件的執(zhí)行。這里我注釋掉了拷貝依賴包的代碼,是因?yàn)樵趐om.xml文件中已經(jīng)配置了maven-dependency-plugin執(zhí)行這樣的操作,無須重復(fù)配置。fileSet可以配置需要拷貝壓縮的文件,directory路徑相對于項(xiàng)目根目錄,outputDirectory路徑相對于輸出目錄target,includes可以對拷貝的文件進(jìn)行篩選。這里可以拷貝壓縮輸出目錄的文件,應(yīng)該就是因?yàn)榇瞬寮\(yùn)行在程序編譯打包之后,這樣子就達(dá)到了我們自定義打包的要求:編譯->拷貝資源文件->項(xiàng)目打包->拷貝依賴的jar包-> assembly進(jìn)行拷貝壓縮。然后使用打出的zip包就可以去部署發(fā)布了,解壓后就能運(yùn)行。
3.程序打包流程示意圖
以上這篇java application maven項(xiàng)目打自定義zip包實(shí)例(推薦)就是小編分享給大家的全部內(nèi)容了,希望能給大家一個(gè)參考,也希望大家多多支持腳本之家。
相關(guān)文章
jetbrain?fleet對標(biāo)vscode實(shí)際操作
Gradle是一個(gè)基于Apache Ant和Apache Maven概念項(xiàng)目自動(dòng)化構(gòu)建開源工具,jetbrain家的fleet(已獲得預(yù)覽權(quán)限)直接對標(biāo)vscode?,?fleet有望超過vscode嗎?今天我們實(shí)際操作下2021-12-12Java 文件傳輸助手的實(shí)現(xiàn)(單機(jī)版)
這篇文章主要介紹了Java 文件傳輸助手的實(shí)現(xiàn)(單機(jī)版),文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友們下面隨著小編來一起學(xué)習(xí)學(xué)習(xí)吧2020-05-05SpringBoot整合SpringSecurity認(rèn)證與授權(quán)
在項(xiàng)目開發(fā)中,權(quán)限認(rèn)證是很重要的,尤其是一些管理類的系統(tǒng),對于權(quán)限要求更為嚴(yán)格,本文主要介紹了SpringBoot整合SpringSecurity認(rèn)證與授權(quán),感興趣的可以了解一下2023-11-11Java經(jīng)典設(shè)計(jì)模式之責(zé)任鏈模式原理與用法詳解
這篇文章主要介紹了Java經(jīng)典設(shè)計(jì)模式之責(zé)任鏈模式,簡單說明了責(zé)任鏈模式的概念、原理,并結(jié)合實(shí)例形式分析了java實(shí)現(xiàn)責(zé)任鏈模式的具體用法與相關(guān)注意事項(xiàng),需要的朋友可以參考下2017-08-08springMVC中基于token防止表單重復(fù)提交方法
本篇文章主要介紹了springMVC中基于token防止表單重復(fù)提交方法,小編覺得挺不錯(cuò)的,現(xiàn)在分享給大家,也給大家做個(gè)參考。一起跟隨小編過來看看吧2017-07-07如何基于Jenkins構(gòu)建Jmeter項(xiàng)目
這篇文章主要介紹了如何基于Jenkins構(gòu)建Jmeter項(xiàng)目,文中通過示例代碼介紹的非常詳細(xì),對大家的學(xué)習(xí)或者工作具有一定的參考學(xué)習(xí)價(jià)值,需要的朋友可以參考下2020-09-09