maven--插件篇(assembly插件)

1. 简介

简单的说,maven-assembly-plugin 就是用来帮助打包用的,比如说打出一个什么类型的包,包里包括哪些内容等等。

2. 常见的maven插件

maven插件是在生命周期中某些阶段执行的任务。一个插件完成一项功能。以下介绍几种常见的插件。
如对于打包来说,有多种插件选择。最常见的有以下3个:

pluginfunction
maven-jar-pluginmaven 默认打包插件,用来创建 project jar
maven-shade-plugin用来打可执行包,executable(fat) jar
maven-assembly-plugin支持定制化打包方式,例如 apache 项目的打包方式

以下选取几个常见插件介绍。

maven-compiler-plugin

编译Java源码,一般只需设置编译的jdk版本

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-compiler-plugin</artifactId>
    <version>3.6.0</version>
    <configuration>
        <source>1.8</source>
        <target>1.8</target>
    </configuration>
</plugin>

或者在properties设置jdk版本

<properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.8</maven.compiler.source>
        <maven.compiler.target>1.8</maven.compiler.target>
 </properties>

maven-jar-plugin

打成jar时,设定manifest的参数,比如指定运行的Main class,还有依赖的jar包,加入classpath中

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <classpathPrefix>/data/lib</classpathPrefix>
                <mainClass>com.zhang.spring.App</mainClass>
            </manifest>
        </archive>
    </configuration>
</plugin>

tomcat7-maven-plugin

用于远程部署Java Web项目

<plugin>
    <groupId>org.apache.tomcat.maven</groupId>
    <artifactId>tomcat7-maven-plugin</artifactId>
    <version>2.2</version>
    <configuration>
        <url>http://59.110.162.178:8080/manager/text</url>
        <username>linjinbin</username>
        <password>linjinbin</password>
    </configuration>
</plugin>

maven-shade-plugin

用于把多个jar包,打成1个jar包
一般Java项目都会依赖其他第三方jar包,最终打包时,希望把其他jar包包含在一个jar包里。
与assembly类似,使用assembly即可。以下详解assembly。

3. maven-assembly-plugin

1.在pom中引入插件

1.首先我们需要在pom.xml中配置maven的assembly插件

 <build>
    <plugins>
        <plugin>       
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <executions>
              
              <execution><!-- 配置执行器 -->
              <id>make-assembly</id>
                <phase>package</phase><!-- 绑定到package生命周期阶段上 -->
                (1)
                <goals>
                  <goal>single</goal><!-- 只运行一次 -->   
                </goals>
                
                (2)
                <configuration>
                  <finalName>${project.name}</finalName>
                  <!--主类入口等-->
                  ...
                  
                  <descriptor>src/main/assembly/assembly.xml</descriptor><!--配置描述文件路径--> 
                </configuration>
              
              </execution>
            </executions>
          </plugin>
        </plugins>
     </build>

2.两个主要的参数设置(上述中的(1)(2))

I) Assembly插件的goals

  • single
  • help

可以执行如下命令完成动作:

mvn assembly:single

或者是,绑定到package生命周期阶段上(见上配置)触发。后续可以直接执行:

mvn package

这也是最常见的Assembly插件配置方式。

II)Assembly descriptor

Assembly Descriptor可以使用内置的,或者定制的。

(1) 使用内置的Assembly Descriptor

要使用maven-assembly-plugin,需要指定至少一个要使用的assembly descriptor 文件。默认情况下,maven-assembly-plugin内置了几个可以用的assembly descriptor:

  • bin : 类似于默认打包,会将bin目录下的文件打到包中;
  • jar-with-dependencies : 会将所有依赖都解压打包到生成物中;
  • src :只将源码目录下的文件打包;
  • project : 将整个project资源打包。

使用 descriptorRefs来引用(官方提供的定制化打包方式)【不建议使用】

<plugin>  
    <artifactId>maven-assembly-plugin</artifactId>  
    <configuration>  
    
        <descriptorRefs>  
            <descriptorRef>jar-with-dependencies</descriptorRef>  
        </descriptorRefs>  
    </configuration>  
</plugin>

上述直接配置jar-with-dependencies打包方式。不需要引入额外文件。实际上,上述4中预定义的assembly descriptor有对应的xml。要查看它们的详细定义,可以到maven-assembly-plugin.jar里去看,例如对应 bin 的assembly descriptor 原始文件如下:

<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>bin</id>
    <formats>
        <format>tar.gz</format>
        <format>tar.bz2</format>
        <format>zip</format>
    </formats>
    <fileSets>
        <fileSet>
            <directory>${project.basedir}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>README*</include>
                <include>LICENSE*</include>
                <include>NOTICE*</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}</directory>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>*.jar</include>
            </includes>
        </fileSet>
        <fileSet>
            <directory>${project.build.directory}/site</directory>
            <outputDirectory>docs</outputDirectory>
        </fileSet>
    </fileSets>
</assembly>

(2) 自定义Assembly Descriptor

一般来说,内置的assembly descriptor都不满足需求,这个时候就需要写自己的assembly descriptor的实现了。
使用 descriptors,指定打包文件 src/assembly/assembly.xml,即在配置文件内指定打包操作要使用这个自定义assembly descriptor(自定义的xml中配置),需要如下配置,即要引入描述文件:

<configuration>  
    <finalName>demo</finalName>  
    <descriptors>
        <!--描述文件路径-->
        <descriptor>src/assembly/assembly.xml</descriptor>  
    </descriptors>  
    <outputDirectory>output</outputDirectory>
</configuration> 

示例:
src/assembly/assembly.xml:

<?xml version='1.0' encoding='UTF-8'?>
<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>demo</id>
    
    <formats>
        <format>jar</format>
    </formats>
    
    <includeBaseDirectory>false</includeBaseDirectory>
    
    <fileSets>
        <fileSet>
        
            <directory>${project.build.directory}/classes</directory>
            
            <outputDirectory>/</outputDirectory>
            
        </fileSet>
    </fileSets>
</assembly>

这个定义很简单:

  • format:指定打包类型;
  • includeBaseDirectory:指定是否包含打包层目录(比如finalName是output,当值为true,所有文件被放在output目录下,否则直接放在包的根目录下);
  • fileSets:指定要包含的文件集,可以定义多个fileSet;
  • directory:指定要包含的目录;
  • outputDirectory:指定当前要包含的目录的目的地。

回到pom的配置中,自定义的configuration配置后,将会生成一个demo-demo.jar 文件在目录 output 下,其中前一个demo来自finalName,后一个demo来自assembly descriptor中的id,其中的内容和默认的打包出来的jar类似。

如果只想有finalName,则增加配置:

<appendAssemblyId>false</appendAssemblyId>  

对于描述文件的元素,即assembly.xml中的配置节点的详细配置,在此稍作总结,见下。

assembly.xml节点配置

在配置assembly.xml之前,我们先看一下pom中引入插件的结构。

<project>
  [...]
  <build>
    [...]
    <plugins>
      <plugin>
 ------------(1)坐标-----------
        <artifactId>maven-assembly-plugin</artifactId>
        <version>3.0.0</version>
        <configuration>
 ------------(2)入口-----------
          <archive>
            <manifest>
                <addClasspath>true</addClasspath>
                <mainClass>com.***.startup.BootStrap</mainClass> <!-- 你的主类名 -->
            </manifest>
          </archive>
 ------------(3)描述-----------  
          <descriptors>
            <descriptor>src/assembly/assembly.xml</descriptor>
          </descriptors>
        </configuration>
        [...]
</project>

archive说明
上面的mainClass标签中的内容替换成自己的main函数所在的类,前面要包含package名字,也就是package_name.MainClassName

assembly.xml文件的主要结构如下。

id

<id>distribution</id>

id 标识符,添加到生成文件名称的后缀符。如果指定 id 的话,目标文件则是 ${artifactId}-${id}.tar.gz

formats

maven-assembly-plugin 支持的打包格式有zip、tar、tar.gz (or tgz)、tar.bz2 (or tbz2)、jar、dir、war,可以同时指定多个打包格式

<formats>
    <format>dir</format>
  </formats>

dependencySets

用来定制工程依赖 jar 包的打包方式,核心元素如下表所示。

元素类型作用
outputDirectoryString指定包依赖目录,该目录是相对于根目录
includesList<String>包含依赖
excludesList<String>排除依赖
    <dependencySets>
        <dependencySet>
            <outputDirectory>/lib</outputDirectory>
            <excludes>
                <exclude>${project.groupId}:${project.artifactId}</exclude>
            </excludes>
        </dependencySet>
        <dependencySet>
            <outputDirectory>/</outputDirectory>
            <includes>
                <include>${project.groupId}:${project.artifactId}</include>
            </includes>
        </dependencySet>
    </dependencySets>

fileSets

管理一组文件的存放位置,核心元素如下表所示。

元素类型作用
outputDirectoryString指定文件集合的输出目录,该目录是相对于根目录
includesList<String>包含文件
excludesList<String>排除文件
fileModeString指定文件属性,使用八进制表达,分别为(User)(Group)(Other)所属属性,默认为 0644
    <fileSets>
        <fileSet>
            <directory>shell</directory>
            <outputDirectory>/shell</outputDirectory>
        </fileSet>
        <fileSet>
            <directory>cluster_config</directory>
            <outputDirectory>/cluster_config</outputDirectory>
        </fileSet>
    </fileSets>

其他

其他的,如files节点基本类似fileSets。不常用的暂不介绍。

至此,即可按打包成功。下边给出具体示例。

本文学习目标:

  1. 修改mybatis-generator-plus插件的源码(中文注释、4格缩进,简化生成文件个数);

2.项目结构

clipboard.png

2.1 pom中引入插件

pom.xml

<?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>pro-all</artifactId>
        <groupId>cn.whbing.pro</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>mybatis-genarator-modify</artifactId>

    <!--mybatis-generator-plus源码找那个需要以下依赖-->
    <dependencies>
        <dependency>
            <groupId>log4j</groupId>
            <artifactId>log4j</artifactId>
            <version>1.2.17</version>
        </dependency>
        <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant</artifactId>
            <version>1.9.1</version>
        </dependency>
    </dependencies>

    <build>

        <finalName>mybatis-genarator-modify</finalName>

        <!--该resource节点的加入是为了将dtd文件也打包,否则出错-->
        <resources>
            <resource>
                <directory>src/main/resources</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.tld</include>
                    <include>**/*.dtd</include>
                </includes>
                <filtering>false</filtering>
            </resource>
            <resource>
                <directory>src/main/java</directory>
                <includes>
                    <include>**/*.properties</include>
                    <include>**/*.xml</include>
                    <include>**/*.tld</include>
                    <include>**/*.dtd</include>
                </includes>
                <filtering>false</filtering>
            </resource>
        </resources>

        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-assembly-plugin</artifactId>
                <version>2.6</version>
                <!--assembly的配置-->
                <configuration>
                    <finalName>mybatis-genarator-modify</finalName>

                    <!--这里先使用自带的打包,后续再修改成复杂的-->
                    <descriptorRefs>
                        <descriptorRef>jar-with-dependencies</descriptorRef>
                    </descriptorRefs>
                    <!--入口文件-->
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                            <mainClass>org.mybatis.generator.api.ShellRunner</mainClass> <!-- 你的主类名 -->
                        </manifest>
                    </archive>
                </configuration>

                <!--在package生命周期执行-->
                <executions>
                    <execution>
                        <id>make-assembly</id>
                        <phase>package</phase>
                        <goals>
                            <goal>single</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>

        </plugins>
    </build>
</project>

2.2 生成target

clipboard.png

运行命令后,在target目录下生成了文件:

clipboard.png

将上述jar包复制到测试文件夹中,将generatorConfig.xml文件也复制过来:

clipboard.png

其中generatorConfig.xml文件:

<?xml version="1.0" encoding="UTF-8" ?>
<!DOCTYPE generatorConfiguration PUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN"
        "http://mybatis.org/dtd/mybatis-generator-config_1_0.dtd" >
<generatorConfiguration>
    <classPathEntry
        location="/Users/didi/.m2/repository/mysql/mysql-connector-java/5.1.39/mysql-connector-java-5.1.39.jar" />
    <context id="context1"  defaultModelType="flat" targetRuntime="MyBatis3Simple">
        <!-- 为了防止生成的代码中有很多注释,比较难看,加入下面的配置控制  -->
        <!-- 是否去除自动生成的注释 true:是 :false:否 -->
        <!-- <commentGenerator >
            <property name="suppressDate" value="true"/>
            <property name="suppressAllComments" value="true"/>
        </commentGenerator> -->
        <!--去除注释的配置要放在数据库配置的前面,不然会报错-->
        <!-- 注释end -->

        <jdbcConnection driverClass="com.mysql.jdbc.Driver"
            connectionURL="jdbc:MySql://localhost/table***?characterEncoding=UTF-8&amp;allowMultiQueries=true"
            userId="root" password="***" />
        <javaModelGenerator targetPackage="com.***.domain.entity"
            targetProject="src/main/java" />
        <sqlMapGenerator targetPackage="sqlmap"
            targetProject="src/main/resources" />
        <javaClientGenerator targetPackage="com.***.dao"
            targetProject="src/main/java" type="XMLMAPPER" />
        <table tableName="your_tablename" domainObjectName="TaskDO"
            enableCountByExample="true" enableUpdateByExample="true"
            enableDeleteByExample="true" enableSelectByExample="true"
            selectByExampleQueryId="false"></table>


    </context>
</generatorConfiguration>

可以看到成功生成文件

执行命令:

java -jar mybatis-genarator-modify-jar-with-dependencies.jar -configfile generatorConfig.xml

clipboard.png

  • 3
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明 YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明YOLO高分设计资源源码,详情请查看资源内容中使用说明
如果你在使用 Maven 时遇到找不到插件 maven-assembly-plugin 的问题,可以尝试以下解决方法: 1. 检查 Maven 的配置文件 settings.xml 中是否配置了正确的镜像源。可以在该文件中添加如下配置: ``` <mirrors> <mirror> <id>aliyunmaven</id> <name>aliyun maven</name> <url>https://maven.aliyun.com/repository/public</url> <mirrorOf>*</mirrorOf> </mirror> </mirrors> ``` 这个配置会将 Maven 的默认镜像源替换为阿里云的镜像源,由于阿里云的镜像源是国内访问速度较快的镜像源之一,可以尝试使用这个配置来解决找不到插件的问题。 2. 检查 Maven 的本地仓库中是否已经下载了 maven-assembly-plugin 插件。可以在本地仓库的目录中查找是否有以下路径存在: ``` ~/.m2/repository/org/apache/maven/plugins/maven-assembly-plugin/ ``` 如果该路径不存在,说明 Maven 还没有下载该插件,可以尝试执行以下命令来下载该插件: ``` mvn dependency:get -Dartifact=org.apache.maven.plugins:maven-assembly-plugin:3.3.0 ``` 这个命令会下载 maven-assembly-plugin 插件的最新版本到本地仓库中。 3. 检查 Maven 的 pom.xml 文件中是否正确引入了 maven-assembly-plugin 插件。可以在 pom.xml 文件中添加以下配置: ``` <build> <plugins> <plugin> <groupId>org.apache.maven.plugins</groupId> <artifactId>maven-assembly-plugin</artifactId> <version>3.3.0</version> </plugin> </plugins> </build> ``` 这个配置会让 Maven 在构建时自动引入 maven-assembly-plugin 插件,如果该插件已经下载到本地仓库中,就可以正常使用了。 如果以上方法都无法解决问题,可以尝试在 Maven 的命令中加入 -U 参数来强制更新本地仓库中的插件版本。命令如下: ``` mvn clean package -U ``` 这个命令会清除 Maven 的缓存,并从远程仓库下载最新的插件版本到本地仓库中。如果该插件版本存在问题,可以尝试使用其他版本来解决问题。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值