Maven Assembly自定义打包插件

前言

在之前的项目中,一个项目被不同的package划分,util负责各种工具类,exception负责异常处理还有mapper等完成各自的内容,项目需要发布时,通过mvn package产生一个jar包或war包进行全量发布。若util包中的一个类出现问题,则需要再次进行全量发布(直接替换class文件这个粗暴的方式就不说了)。通过阅读几个开源项目代码,发现了一个比较不错的包结构设计方式:将原本的单体项目以maven聚合工程的方式展开,每个子模块完成特定的工作,降低耦合性。例如:新建子工程commo就可以将dto、vo、exception和util单独划分为一个模块,在需要时引入依赖即可。

聚合工程打包部署的两种方式

打包为可执行的Jar包

用Maven快速生成带有依赖的可执行jar包

使用maven assembly自定义打包

通过assembly插件可以将项目文档、依赖、配置文件及其他文件打包为zip、tar.gz等格式的文件,这里推荐用zip。更多关于此插件的描述点这里

  • 我认为插件最强大的功能是可以自定义打包格式,通过读取XML配置文件完成文件管理,依赖管理等。

代码

项目结构是这样的
Maven Assembly自定义打包插件_第1张图片

  1. POM文件添加插件

<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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0modelVersion>
    <parent>
        <groupId>com.lhcgroupId>
        <artifactId>springcloudartifactId>
        <version>1.0-SNAPSHOTversion>
    parent>
    <groupId>com.lhcgroupId>
    <artifactId>serviceproducerartifactId>
    <version>0.0.1-SNAPSHOTversion>
    <name>serviceproducername>
    <description>服务提供者description>

    <properties>
        <java.version>1.8java.version>
    properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.bootgroupId>
            <artifactId>spring-boot-starter-webartifactId>
        dependency>
        
        <dependency>
            <groupId>com.alibaba.cloudgroupId>
            <artifactId>spring-cloud-starter-alibaba-nacos-discoveryartifactId>
            <exclusions>
                <exclusion>
                    <artifactId>guavaartifactId>
                    <groupId>com.google.guavagroupId>
                exclusion>
            exclusions>
        dependency>
        
        <dependency>
            <groupId>com.lhcgroupId>
            <artifactId>commoartifactId>
            <version>0.0.1-SNAPSHOTversion>
        dependency>
        <dependency>
            <groupId>org.projectlombokgroupId>
            <artifactId>lombokartifactId>
            <scope>providedscope>
        dependency>
    dependencies>


    <build>
        
        <finalName>${project.artifactId}finalName>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-jar-pluginartifactId>
                <version>2.6version>
                
                <configuration>
                    <excludes>
                        <exclude>*.ymlexclude>
                        <exclude>*.propertiesexclude>
                        <exclude>*/**.xmlexclude>
                        <exclude>mapperexclude>
                        <exclude>*.xmlexclude>
                        <exclude>*.txtexclude>
                    excludes>
                    <archive>
                        <manifest>
                            
                            <mainClass>com.lhc.serviceproducer.ServiceproducerApplicationmainClass>
                            
                            <useUniqueVersions>falseuseUniqueVersions>
                            <addClasspath>trueaddClasspath>
                            <classpathPrefix>./classpathPrefix>
                        manifest>
                        <manifestEntries>
                            <Class-Path>../conf/Class-Path>
                        manifestEntries>
                    archive>
                configuration>
            plugin>
            
            <plugin>
                <artifactId>maven-assembly-pluginartifactId>
                <version>3.1.0version>
                <configuration>
                    <descriptors>
                        
                        <descriptor>src/main/assembly/assembly.xmldescriptor>
                    descriptors>
                configuration>
                <executions>
                    <execution>
                        <id>make-assemblyid>
                        <phase>packagephase>
                        <goals>
                            <goal>singlegoal>
                        goals>
                    execution>
                executions>
            plugin>
            <plugin>
                <groupId>org.apache.maven.pluginsgroupId>
                <artifactId>maven-compiler-pluginartifactId>
                <configuration>
                    <source>8source>
                    <target>8target>
                configuration>
            plugin>
        plugins>
    build>

project>
  1. assembly.xml定义了项目的打包格式
<assembly xmlns="http://maven.apache.org/ASSEMBLY/2.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
          xsi:schemaLocation="http://maven.apache.org/ASSEMBLY/2.0.0 http://maven.apache.org/xsd/assembly-2.0.0.xsd">

    
    <id>buildid>
    
    <formats>
        <format>tar.gzformat>
        <format>zipformat>
    formats>
    
    <includeBaseDirectory>trueincludeBaseDirectory>
    
    <baseDirectory>${project.artifactId}baseDirectory>


    
    <fileSets>
        <fileSet>
            
            <directory>${basedir}/src/main/assembly/bindirectory>
            
            <outputDirectory>binoutputDirectory>
            
            <fileMode>0755fileMode>
        fileSet>

        
        <fileSet>
            <directory>${basedir}/src/main/resourcesdirectory>
            <includes>
                
                <include>application.propertiesinclude>
                <include>logback.xmlinclude>
                <include>banner.txtinclude>
            includes>
            <outputDirectory>confoutputDirectory>
            <fileMode>0644fileMode>
        fileSet>

        
        <fileSet>
            <directory>${project.build.directory}directory>
            <outputDirectory>liboutputDirectory>
            <includes>
                <include>${project.artifactId}.jarinclude>
            includes>
            <fileMode>0755fileMode>
        fileSet>

    fileSets>

    <dependencySets>
        <dependencySet>
            <outputDirectory>liboutputDirectory>
            <scope>runtimescope>
            
            <excludes>
                <exclude>junit:junitexclude>
            excludes>
        dependencySet>
    dependencySets>
assembly>

官网提供了非常丰富的配置,这里只使用了部分,多去官网了解吧

  1. 执行mvn package命令,得到文件,上传发布即可

    Maven Assembly自定义打包插件_第2张图片

  2. 在服务器上解压文件得到三个目录

  3. 运行启动脚本即可
    Maven Assembly自定义打包插件_第3张图片

最后

通过这种打包方式,可以进行快速发布,修改配置文件接口启动。若依赖的commo模块需要修改,修改之后替换lib包中的文件即可
原文地址
若有错误,欢迎指教,谢谢

你可能感兴趣的:(工具,java,Linux系统)