zoukankan      html  css  js  c++  java
  • 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: liborg.eclipse.swt_3.3.0.v3346.jar liborg.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包中所有/指定文件解压到当前文件夹中。

  • 相关阅读:
    各国语言缩写列表,各国语言缩写-各国语言简称,世界各国域名缩写
    How to see log files in MySQL?
    git 设置和取消代理
    使用本地下载和管理的免费 Windows 10 虚拟机测试 IE11 和旧版 Microsoft Edge
    在Microsoft SQL SERVER Management Studio下如何完整输出NVARCHAR(MAX)字段或变量的内容
    windows 10 x64系统下在vmware workstation pro 15安装macOS 10.15 Catelina, 并设置分辨率为3840x2160
    在Windows 10系统下将Git项目签出到磁盘分区根目录的方法
    群晖NAS(Synology NAS)环境下安装GitLab, 并在Windows 10环境下使用Git
    使用V-2ray和V-2rayN搭建本地代理服务器供局域网用户连接
    windows 10 专业版安装VMware虚拟机碰到的坑
  • 原文地址:https://www.cnblogs.com/mmaa/p/5789920.html
Copyright © 2011-2022 走看看