IDEA使用maven進行多模塊項目打包並梳理正確的打包順序

maven多模塊打包一般相互之間都有互相的依賴關係,如果沒有按照正確的依賴關係順序進行打包就會報錯。

例如有三個模塊web、service、common。其中web依賴service。web和service都依賴common,那麼正確的打包順序就是:

common->service->web。

否則就會報錯。

如果用一個父目錄包含他們三個模塊的話,可以用

maven-assembly-plugin

進行統一打包。統一打包需要在父目錄中增加pom文件,並且在pom.xml註明包含關係。如:

	<modelVersion>4.0.0</modelVersion>

	<groupId>cn.com.leonado</groupId>
	<artifactId>test</artifactId>
	<packaging>pom</packaging>
	<version>1.0-SNAPSHOT</version>


	<modules>
		<module>web</module>
		<module>service</module>
        <module>common</module>
	</modules>

這樣在maven進行統一打包的時候就會先進行父模塊的打包後進行子模塊的打包。子模塊之間的打包順序是根據pom.xml文件中的引用依賴順序來決定的。以下爲我的依賴順序

web模塊pom.xml引用
		<dependency>
			<groupId>cn.com.leonado</groupId>
			<artifactId>service</artifactId>
			<version>${project.version}</version>
		</dependency>
		<dependency>
			<groupId>cn.com.leonado</groupId>
			<artifactId>common</artifactId>
			<version>${project.version}</version>
		</dependency>

service模塊pom.xml引用
		<dependency>
			<groupId>cn.com.leonado</groupId>
			<artifactId>common</artifactId>
			<version>${project.version}</version>
		</dependency>

這樣的打包順序就變成common->service->web的順序。如果要進行打包成可運行的安裝包形式就需要在maven-assembly-plugin插件中引用打包腳本。一般打包腳本卸載最外層的pom.xml中。

			<plugin>
				<artifactId>maven-assembly-plugin</artifactId>
				<configuration>
					<finalName>leonado-test</finalName>
					<descriptors>
						<descriptor>/assembly-win64zip.xml</descriptor>
					</descriptors>
				</configuration>
				<executions>
					<execution>
						<id>distro-assembly</id>
						<phase>package</phase>
						<goals>
							<goal>single</goal>
						</goals>
					</execution>
				</executions>
			</plugin>

打包腳本示例,打包腳本目錄位置爲web模塊的根路徑下:

<?xml version="1.0" encoding="utf8"?>
<assembly
	xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"
	xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
	xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">
	<!-- 產生zip文件的名字 -->
	<id>LEONADO_TEST_APIDemo(Java版)</id>
	<formats>
		<format>zip</format>
	</formats>

	<!-- 將全部依賴放到/lib目錄下 -->
	<dependencySets>
		<dependencySet>
			<outputDirectory>/lib</outputDirectory>
		</dependencySet>
	</dependencySets>
	<!-- 根目錄下的默認bin,config,init,web四個目錄會被添加到tar中 -->
	<fileSets>
		<!-- jdk 目錄 C:\Program Files\Java\jre7-->
		<fileSet>
			<directory>/home/build/pki/jdk/jdk1.8.0_111/jre</directory>
			<!--<directory>C:\Program Files\Java\jdk1.8.0_51\jre</directory>-->
			<outputDirectory>/jre-1.8</outputDirectory>
			<includes>
				<include>**</include>
			</includes>
		</fileSet>

		<!--構建bin目錄 -->
		<fileSet>
			<directory>windows</directory>
			<outputDirectory>/bin</outputDirectory>
			<includes>
				<include>*.bat</include>
			</includes>
		</fileSet>
<!--構建log目錄 -->
		<fileSet>
			<directory>log</directory>
			<outputDirectory>/log</outputDirectory>
			<includes>
				<include>**</include>
			</includes>
		</fileSet>
		<fileSet>
			<directory>script</directory>
			<outputDirectory>/</outputDirectory>
			<includes>
				<include>**</include>
			</includes>
		</fileSet>

		<!-- 構建跟目錄 -->
		<fileSet>
			<directory>${basedir}</directory>
			<outputDirectory>/</outputDirectory>
			<includes>
				<include>config.ini</include>
				<include>logback.xml</include>				
			</includes>
		</fileSet>
	</fileSets>
	<!--打包文件將依賴模塊打成的jar放到lib依賴目錄中-->
	<files>
		<file>
			<source>../common/target/common-2.0.jar</source>
			<outputDirectory>/lib</outputDirectory>
			<destName>common-2.0.jar</destName>
		</file>
		<file>
			<source>../service/target/service-2.0.jar</source>
			<outputDirectory>/lib</outputDirectory>
			<destName>service-2.0.jar</destName>
		</file>
	</files>
</assembly>

最終打包結果爲:

 

所有的依賴包全部打包到lib下,包括web.jar、service.jar、common.jar。

 

以上希望對大家有幫助。

如果轉載請標明出處。

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章