Maven使用assembly打包web项目


什么是Assembly?

“assembly”是把一组文件、目录、依赖元素组装成一个归档文件. 比如, 假设一个 Maven project定义了一个JAR artifact,它包含控制台应用程序和Swing应用程序 。这样一个工程可以定义两套包含描述符,一套给给控制台应用,另一套给Swing应用程序,它们包含各自的脚本、目录和依赖。

Assembly Plugin的描述符可以定义任何一个文件或者目录归档方式。举个例子,如果的你的Maven 2工程包含”src/main/bin”这个目录,你可以指示Assembly插件复制“src/main/bin”目录下所有的文件到bin目录里(归档文件里的目录),并且可以修改它们的权限属性(UNIX mode)。见 assembly descriptor.

The Maven Assembly Plugin

Maven 2.0的Assembly插件目的是提供一个把工程依赖元素、模块、网站文档等其他文件存放到单个归档文件里。

使用任何一个预定义的描述符你可以轻松的构建一个发布包。这些描述符能处理一些常用的操作,如:把依赖的元素的归档到一个jar文件. 当然, 你可以自定义描述符来更灵活的控制依赖,模块,文件的归档方式。

maven-assembly-plugin : 是maven中针对打包任务而提供的标准插件;

Assembly打包步骤

首先,在pom.xml中添加assembly插件

<build>
        <plugins>

            <plugin>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.5.5</version>
                <configuration>
                    <finalName>${project.artifactId}</finalName>
                    <skipAssembly>false</skipAssembly>
                    <appendAssemblyId>false</appendAssemblyId>
                    <tarLongFileMode>gnu</tarLongFileMode>
                    <outputDirectory>target</outputDirectory>
                    <descriptors>
                        <descriptor>src/main/assembly/assembly.xml</descriptor>
                    </descriptors>
                </configuration>
                <executions>
                    <execution>
                        <id>assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>

然后,在src/main/assembly目录下创建assembly.xml文件

<?xml version="1.0" encoding="UTF-8"?>
<assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
		  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
		  xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2">
	<id>projectname</id>
	<baseDirectory>${project.artifactId}.war</baseDirectory>
	<includeBaseDirectory>true</includeBaseDirectory>
	<formats>
		<format>tgz</format>
	</formats>
	<fileSets>
        <!-- 将class和配置文件打到WEB-INF/classes下 -->
        <fileSet>  
	      <directory>${project.basedir}/target/classes</directory>  
	      <outputDirectory>WEB-INF/classes</outputDirectory>  
	    </fileSet>
	    
	    <!-- 将webapp下的内容全部打到WEB-INF/classes -->
        <fileSet>  
	      <directory>${project.basedir}/src/main/webapp</directory>  
	      <outputDirectory>/</outputDirectory>  
	    </fileSet>
    </fileSets>
	<dependencySets>
		<dependencySet>
			<unpack>false</unpack>
			<outputDirectory>WEB-INF/lib</outputDirectory>
			<useProjectArtifact>true</useProjectArtifact>
			<!-- 将scope为runtime的依赖包打包到lib目录下。 -->
			<scope>runtime</scope>
		</dependencySet>
	</dependencySets>
</assembly>

注意:format支持多种形式:war、zip等等

最后,使用maven命令打包就可以了:

 mvn clean package -Dmaven.test.skip=true assembly:assembly

 

原创文章,转载请注明出处:转载自小马过河 - Maven使用assembly打包web项目


Jbone

Spring Cloud实战项目jbone正在开发中, jbone功能包括服务管理、单点登录、系统管理平台、内容管理平台、电商平台、支付平台、工作流平台等子系统。欢迎关注!

我要关注
马军伟
关于作者 马军伟
写的不错,支持一下

先给自己定个小目标,日更一新。