zl程序教程

您现在的位置是:首页 >  后端

当前栏目

Maven之多模块打包成一个jar包及assembly

Mavenjar打包模块 一个 assembly 之多
2023-09-11 14:20:55 时间
?xml version="1.0" encoding="UTF-8"?    project xmlns="http://maven.apache.org/POM/4.0.0"            xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"            xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"         parent             artifactId whatsmars-parent /artifactId             groupId com.itlong /groupId             version 1.0-SNAPSHOT /version         /parent         modelVersion 4.0.0 /modelVersion         artifactId earth /artifactId         packaging jar /packaging         name ${project.artifactId} /name         description The all in one project of whatsmars-earth /description         properties             skip_maven_deploy false /skip_maven_deploy         /properties         dependencies             dependency                 groupId com.itlong /groupId                 artifactId whatsmars-common /artifactId                 version ${project.parent.version} /version             /dependency             dependency                 groupId com.itlong /groupId                 artifactId whatsmars-earth-domain /artifactId                 version ${project.parent.version} /version             /dependency             dependency                 groupId com.itlong /groupId                 artifactId whatsmars-earth-dao /artifactId                 version ${project.parent.version} /version             /dependency             dependency                 groupId com.itlong /groupId                 artifactId whatsmars-earth-service /artifactId                 version ${project.parent.version} /version             /dependency         /dependencies         build             plugins                 plugin                     artifactId maven-source-plugin /artifactId                     executions                         execution                             id attach-sources /id                             phase none /phase                         /execution                     /executions                 /plugin                 plugin                     artifactId maven-javadoc-plugin /artifactId                     executions                         execution                             id attach-javadoc /id                             phase deploy /phase                             goals                                 goal jar /goal                             /goals                         /execution                     /executions                     configuration                         show public /show                         charset UTF-8 /charset                         encoding UTF-8 /encoding                         docencoding UTF-8 /docencoding                         excludePackageNames com.itlong.com.* /excludePackageNames                         links                             link http://docs.oracle.com/javase/6/docs/api /link                         /links                     /configuration                 /plugin                 plugin                     groupId org.apache.maven.plugins /groupId                     artifactId maven-shade-plugin /artifactId                     version 1.4 /version                     executions                         execution                             phase package /phase                             goals                                 goal shade /goal                             /goals                             configuration                                 createSourcesJar false /createSourcesJar                                 promoteTransitiveDependencies true /promoteTransitiveDependencies                                 artifactSet                                     includes    !-- 这里只是随便拿了几个模块来作为例子,实际上如下模块是不应该打包在一起的 --                                         include com.itlong:whatsmars-common /include                                         include com.itlong:whatsmars-earth-domain /include                                         include com.itlong:whatsmars-earth-dao /include                                         include com.itlong:whatsmars-earth-service /include                                     /includes                                 /artifactSet                                 transformers                                 /transformers                             /configuration                         /execution                     /executions                 /plugin             /plugins         /build    /project   

 

你是否想要创建一个包含脚本、配置文件以及所有运行时所依赖的元素(jar)Assembly插件能帮你构建一个完整的发布包。

Assembly插件会生成 “assemblies”, 此特性等同于的Maven 1 distribution plug-in.。该插件不仅支持创建二进制归档文件,也支持创建源码归档文件。这些assemblies定义在一个assembly描述符文件里。你可以选择自定义assembly描述符或者直接使用插件自带的三个预定义描述符中的任何一个.

目前Assembly插件支持如下格式的归档文件:

tar.gz tar.bz2 and any other format that the ArchiveManager has been configured for

Maven 2上使用assembly的简单步骤:

从预定义描述符里选择一个或者自己编写一个assembly描述符号。 工程的pom.xml里配置Assembly插件。 在工程根目录下运行”mvn assembly:assembly”命令 。

如何自定义assembly描述符,详见Assembly Descriptor Format.

什么是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中针对打包任务而提供的标准插件

(1)、在pom.xml 文件里面的配置说明

 


     artifactId maven-assembly-plugin /artifactId         executions    !--执行器 mvn assembly:assembly--             execution                 id make-zip /id !--名字任意 --               phase package /phase !-- 绑定到package生命周期阶段上 --               goals                  goal single /goal !-- 只运行一次 --               /goals                   configuration                          descriptors   !--描述文件路径--                               descriptor src/main/resources/zip.xml /descriptor                         /descriptors                 /configuration             /execution         /executions      /plugin   
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"         id release /id         formats             format zip /format         /formats         fileSets             fileSet                 directory ${project.basedir}\src\main\config /directory                 !-- 过滤 --                 excludes                     exclude *.xml /exclude                 /excludes                 outputDirectory \ /outputDirectory             /fileSet         /fileSets                dependencySets             dependencySet                 useProjectArtifact true /useProjectArtifact                 outputDirectory lib /outputDirectory !-- 将scope为runtime的依赖包打包到lib目录下。 --                 scope runtime /scope             /dependencySet         /dependencySets    /assembly   
        exclude junit:junit /exclude
        exclude commons-lang:commons-lang /exclude
        exclude commons-logging:commons-logging /exclude
/excludes

 

当前项目构件是否包含在这个依赖集合里。

useProjectArtifact true /useProjectArtifact

 

依赖包打包到目录下
dependencySets
   dependencySet
    outputDirectory lib /outputDirectory !-- 将scope为runtime的依赖包打包到lib目录下。 --
    useProjectArtifact true /useProjectArtifact
    scope runtime /scope
   /dependencySet
/dependencySets

原文链接:[http://wely.iteye.com/blog/2304825]