`
brandNewUser
  • 浏览: 456889 次
  • 性别: Icon_minigender_1
  • 来自: 北京
社区版块
存档分类
最新评论

Maven assembly插件进行自定义构建

阅读更多

众所周知,Maven是一个约定优于配置的java构建工具,通常我们只需要定义非常少的内容,就可以根据package标签属性来构建生成的jar, war包的相关内容。

 

如果想要对maven中依赖的内容一起打包,就需要使用maven-assembly-plugin来实现,对于该插件,其基本的配置如下:

 

<plugin>
        <artifactId>maven-assembly-plugin</artifactId>
                <configuration>
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <archive>
                        <manifest>
                            <mainClass>com.xxx.Main</mainClass>
                        </manifest>
                    </archive>
 
                </configuration>
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
</plugin>
 
 

 

 

这样就会在执行clean package之后,构建出一个比较完整的jar包,jar包以jar-with-dependencies为后缀,带有其依赖的所有.class文件。

 

但是,如果我们想要在Maven中进行比较复杂的构建,就肯定不够用了,需要根据实际情况进行不同的配置了。

 

链接中对maven-assembly-plugin插件中的所有可选配置进行了详细说明,这里根据项目需要,我们做的一些简单配置。

 

我们需要指定configuration下的具体package配置文件:

 

<descriptors>                                  
       <descriptor>src/main/assemble/package.xml</descriptor>
</descriptors>
 

 

 

关于配置文件中具体元素的说明,可以参考下面的链接:

http://maven.apache.org/plugins/maven-assembly-plugin/assembly.html#class_binaries

 

<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 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
    <id>package</id>
    <formats>
        <format>jar</format>
</formats>

 

 

在package.xml中,我们首先指定其id和format,id可以在pom.xml文件中指定对应的configuration下的appendAssemblyId标签,将id附加到生成的jar包作为后缀。

<appendAssemblyId>true</appendAssemblyId>

  

项目中依赖比较多,而很多都是在执行时存在的,并不需要真正打包到实际环境中(比如依赖的hadoop包)。我们将整个项目用maven进行分模块构造后,依赖的模块内jar包需要打包到一起,以避免重新设置HADOOP_CLASSPATH。

 

这就需要使用dependencySets标签,添加includes,将具体的依赖jar包打包到具体的生成jar包中。

 

<dependencySets>
        <dependencySet>
            <unpack>true</unpack>
            <scope>runtime</scope>
            <includes>
                <include>${groupId}:${artifactId}:${打包类型}:${version}</include>
<!--例如:-->
                <include>com.sun.mail:javax.mail:jar:1.5.2</include>
            </includes>
        </dependencySet>
    </dependencySets>

 

unpack属性控制依赖的jar包是否进行解压操作,还是直接放在根目录下。如果设置了outputDirectory,将这些文件都放在该目录下。例如设置outputDirectory为lib,则所有的依赖文件都放在该目录下。

 

如果解压后的文件放在特定的目录下,那么该jar包可能不能真正使用,需要在具体的MANIFEST.MF文件中并没有指定特定的CLASSPATH,否则就会包找不到具体的class。比如具体的格式如下:

Manifest-Version: 1.0
Main-Class: windows.VideoWindow
Class-Path: lib\org.eclipse.swt_3.3.0.v3346.jar lib\org.eclipse.swt.win32.win32.x86_3.3.0.v3346.jar
 

 

Class-Path: 后面的写法,空格分开,绝对不能有分号,且最后必须有换行。这个文件有着奇怪的分行和空格要求,在编写的时候需要注意。

 

如何将自定义的MANIFEST.MF文件附加到打包的jar包中,这就需要使用configuration中的archieve标签。

<archive>                     
      <manifestFile>src/main/assemble/MANIFEST.MF</manifestFile>
</archive>

 

 

至此,项目中使用的jar包就可以正常地构建了。在jar包构造过程中,jar的两个命令非常有用:

jar –tf target/**.jar

  

该命令能够列出jar包内的所有文件。

 

jar –xf target/**.jar (指定文件)

 

该命令能够将jar包中所有/指定文件解压到当前文件夹中。

分享到:
评论

相关推荐

    使用Maven assembly打多个自定义包及War包简介

    本篇文章将深入探讨如何使用Maven Assembly插件来创建多个自定义包以及War包,这对于Java开发者来说尤其重要,因为它使得项目打包和分发变得更加方便。 Maven是一个强大的Java项目管理工具,它通过配置文件POM...

    maven assembly 插件 代码实现

    总结来说,Maven Assembly插件是Maven的一个强大工具,能够帮助开发者创建自定义的项目归档,包含所有必要的文件和依赖,简化了软件的分发和部署流程。通过熟练掌握其配置和使用,开发者可以更高效地管理项目构建...

    maven-assembly 自定义打包方式

    而`maven-assembly-plugin`是Maven的一个插件,用于创建自定义的打包(assembly)格式,比如tar、tar.gz、zip等。这个插件允许开发者在打包过程中包含额外的资源,如配置文件、文档等,使得最终的发布包更完整,便于...

    Maven常用插件整理.docx

    在Java开发领域,Maven是广泛使用的构建工具,它...综上所述,Maven的插件系统极大地增强了其灵活性和实用性,使得开发者能够根据项目需求自定义构建过程。正确配置和使用这些插件,能够确保项目构建高效且符合预期。

    Assembly插件

    Assembly插件是Maven或Gradle构建系统中的一个组件,它允许开发者通过XML配置文件(assembly.xml)来定义如何打包项目。这个插件提供了高度定制化的打包能力,包括文件的拷贝、重命名、过滤以及归档格式的选择等。它...

    maven打包dubbo服务接口(maven-assembly-plugin)

    本篇文章将详细探讨如何使用Maven的`maven-assembly-plugin`插件来打包Dubbo服务接口。 首先,我们要理解Maven的生命周期和构建过程。Maven有多个生命周期阶段,如`clean`、`compile`、`test`、`package`等,每个...

    maven插件及其使用方法(2)

    自定义插件通常基于Mojo(Maven插件目标对象)编写,并通过Maven的插件开发工具集(Maven Plugin Tools)进行构建和测试。 **六、常用Maven插件** 1. **maven-assembly-plugin**:创建可分发的归档文件,如zip或...

    [maven] 常用插件解析.docx

    Maven 作为一个插件框架,其核心并不执行任何具体的构建任务,而是交给插件来完成。每个任务对应了一个插件目标(goal),每个插件会有一个或者多个目标。用户可以通过两种方式调用 Maven 插件目标,一种是将插件...

    maven plugin打包下载

    1. **打包**:在项目开发完成后,开发者可以使用`maven-assembly-plugin`或`maven-shade-plugin`进行打包。`assembly-plugin`用于创建自定义的归档文件,如包含所有依赖的ZIP或JAR。`shade-plugin`则可以合并多个JAR...

    maven 使用assembly 进行打包的方法

    而Maven Assembly Plugin则是Maven的一个插件,它允许开发者自定义构建过程,将项目的各种输出合并成一个单一的归档文件(如ZIP、TAR.GZ等),这对于分发软件或集成测试非常有用。本文将详细介绍如何使用Maven ...

    maven构建项目可以粘贴的内容

    在软件开发过程中,Maven是一个不可或缺的工具,它是一个项目管理框架,可以帮助开发者构建...在实际开发中,你可以根据具体需求,结合提供的"ideaMaven 构建项目可粘贴内容"进行配置和调整,以满足项目的个性化需求。

    Maven by Example pdf英文原版

    可以利用Maven插件如assembly插件,将项目及其依赖打包成一个可分发的应用程序。 ### Maven在Web应用项目中的应用 1. **简单的Web应用项目** Maven同样适用于Web应用程序。用户可以使用Maven标准的目录结构来组织...

    Wowza插件开发和Maven的集成示例项目

    5. **配置和打包**:在pom.xml中配置Maven的打包插件,例如`maven-assembly-plugin`或`maven-jar-plugin`,以生成可部署到Wowza服务器的JAR文件。 6. **测试和部署**:使用Wowza提供的管理工具或API部署你的插件,...

    assembly.zip

    总结来说,"assembly.zip"文件包含的资源帮助开发者使用Maven的Assembly插件进行项目打包,而WebAssembly则是现代Web开发中的一个重要技术,允许开发者利用高性能的本地代码在浏览器环境中运行应用。了解和熟练掌握...

    maven in action 中文

    除了基本功能,本书还涵盖了Maven的高级话题,如多模块项目管理、远程仓库的使用、解决依赖冲突、自定义构建过程以及Maven的集成开发环境(IDE)支持。对于大型项目,理解如何有效地组织多模块项目至关重要,书中...

    Maven 生成打包可执行jar包的方法步骤

    Maven提供了多种打包插件,如maven-jar-plugin(默认的JAR打包插件)、maven-shade-plugin(用于生成可执行的fat JAR)和maven-assembly-plugin(支持自定义打包)。在这个场景中,我们将使用maven-jar-plugin和...

    Maven是基于项目对象模型(POM)

    例如,maven-assembly-plugin用于创建自定义的归档文件,maven-javadoc-plugin生成项目文档,maven-source-plugin则打包源代码。 在实际开发中,Eclipse集成Maven的插件m2eclipse(现在通常称为Maven Integration ...

    apache-maven-3.6.3

    此外,Maven支持插件系统,允许开发者扩展Maven的功能,例如可以通过Maven Surefire Plugin进行单元测试,通过Maven Resources Plugin处理资源文件,通过Maven Assembly Plugin创建自包含的可分发包等。 总的来说,...

    maven初学者摇篮

    - **构建命令行应用程序**: 使用`maven-assembly-plugin`。 3. **简单的Web应用** - **定义项目**: - 使用`archetype-webapp`生成Web应用骨架。 - 配置项目基本信息。 - **配置Web容器**: 如Jetty。 - **添加...

    maven安装包

    4. **插件使用**:Maven 插件丰富,如使用 `maven-surefire-plugin` 运行测试,`maven-assembly-plugin` 创建自定义打包,`maven-javadoc-plugin` 生成 API 文档等。 5. **生命周期与构建阶段**:Maven 有三个主要...

Global site tag (gtag.js) - Google Analytics