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。

 

以上希望对大家有帮助。

如果转载请标明出处。

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