zoukankan      html  css  js  c++  java
  • 信步漫谈之Maven——打可运行Jar包


    1 目标

    将本地 lib 和依赖 jar 包一起打为一个可执行的 jar 包。

    2 程序结构

    主项目:com.alfred.maven.packagejar-exec
    引入本地 jar 包:maven-demo01-1.0.0-SNAPSHOT.jar
    引入 maven 依赖包:log4j-1.2.12.jar

    • 主项目结构
    com.alfred.maven.packagejar-exec
      ∟ lib
          ∟ maven-demo01-1.0.0-SNAPSHOT.jar
      ∟ src
          ∟ main
              ∟ java
                  ∟ com.alfred.maven.packagejarexec
                      ∟ Main
          ∟ resources
              ∟ log4j.properties
      ∟ pom.xml
    
    • 主项目 Main 代码
    package com.alfred.maven.packagejarexec;
    
    import com.alfred.maven.demo01.MavenDemo01;
    import org.apache.log4j.Logger;
    
    /**
     * @Author: alfred
     * @Date: 2020/11/24
     * @description:
     */
    public class Main {
    
        private static Logger logger = Logger.getLogger(Main.class);
    
        public static void main(String[] args) {
            if(args == null || args.length == 0){
                logger.info("packagejar exec args is null");
            }else{
                logger.info("packagejar exec args.length = "+args.length);
            }
            logger.info("maven demo01 say:"+MavenDemo01.sayName());
        }
    
    }
    
    • Demo01 的 MavenDemo01 代码
    package com.alfred.maven.demo01;
    
    /**
     * @Author: alfred
     * @Date: 2020/11/24
     * @description:
     */
    public class MavenDemo01 {
        public static String sayName(){
            return "demo01";
        }
    }
    

    3 Maven 的 POM 脚本

    <?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">
        <modelVersion>4.0.0</modelVersion>
        <groupId>com.alfred.maven</groupId>
        <artifactId>maven-packagejar-exec</artifactId>
        <version>1.0.0-SNAPSHOT</version>
        <packaging>jar</packaging>
        <description>
            概述:【Maven技术研究】打可执行 jar 包
            目标:将本地 lib 和依赖 jar 包一起打为一个可执行的 jar 包
            实现效果:输入 jar 包参数,打印日志输出参数个数,并调用本地jar包打印返回信息
            1)主函数:com.alfred.maven.packagejarexec.Main
            2)本地依赖包路径:lib(存放demo01)
            3)maven 依赖包:log4j
        </description>
    
        <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>
            <log4j.version>1.2.12</log4j.version>
        </properties>
    
        <dependencies>
            <!-- maven依赖包 -->
            <dependency>
                <groupId>log4j</groupId>
                <artifactId>log4j</artifactId>
                <version>${log4j.version}</version>
            </dependency>
            <!-- 本地jar包 -->
            <dependency>
                <groupId>com.alfred.maven</groupId>
                <artifactId>maven-demo01</artifactId>
                <version>1.0.0-SNAPSHOT</version>
                <scope>system</scope>
                <systemPath>${project.basedir}/lib/maven-demo01-1.0.0-SNAPSHOT.jar</systemPath>
            </dependency>
        </dependencies>
    
        <build>
            <plugins>
                <!-- 自动清理 -->
                <plugin>
                    <artifactId>maven-clean-plugin</artifactId>
                    <version>3.1.0</version>
                    <executions>
                        <execution>
                            <id>auto-clean</id>
                            <phase>initialize</phase>
                            <goals>
                                <goal>clean</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
                <!--
                    使用场景:在使用maven依赖或本地jar包都可以使用该方式打包可执行jar包
                    特点:会把依赖的所有jar包完整的压缩到可执行jar包中
                -->
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-jar-plugin</artifactId>
                    <version>3.0.2</version>
                    <configuration>
                        <archive>
                            <manifest>
                                <mainClass>com.alfred.maven.packagejarexec.Main</mainClass>
                            </manifest>
                        </archive>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>com.jolira</groupId>
                    <artifactId>onejar-maven-plugin</artifactId>
                    <version>1.4.4</version>
                    <executions>
                        <execution>
                            <configuration>
                                <!-- 自定义jar包名称 -->
                                <filename>packagejar-exec.jar</filename>
                                <attachToBuild>true</attachToBuild>
                                <classifier>onejar</classifier>
                            </configuration>
                            <goals>
                                <goal>one-jar</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
    
                <!--
                    使用场景:在没有使用本地jar包情况下,也可以使用该方式打包
                    特点:会解压依赖包合并到可执行jar包中
                -->
    <!--            <plugin>-->
    <!--                <groupId>org.apache.maven.plugins</groupId>-->
    <!--                <artifactId>maven-shade-plugin</artifactId>-->
    <!--                <version>1.2.1</version>-->
    <!--                <executions>-->
    <!--                    <execution>-->
    <!--                        <phase>package</phase>-->
    <!--                        <goals>-->
    <!--                            <goal>shade</goal>-->
    <!--                        </goals>-->
    <!--                        <configuration>-->
    <!--                            &lt;!&ndash; 自定义jar包名称 &ndash;&gt;-->
    <!--                            <finalName>packagejar-exec</finalName>-->
    <!--                            <transformers>-->
    <!--                                <transformer-->
    <!--                                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">-->
    <!--                                    <mainClass>com.alfred.maven.packagejarexec.Main</mainClass>-->
    <!--                                </transformer>-->
    <!--                            </transformers>-->
    <!--                        </configuration>-->
    <!--                    </execution>-->
    <!--                </executions>-->
    <!--            </plugin>-->
            </plugins>
        </build>
    </project>
    

    4 打包结构

    packagejar-exec.jar
      ∟ META-INF
      ∟ com.simontuffs.onejar
          ∟ ...(打包组件的编译程序,省略)
      ∟ doc
      ∟ lib
          ∟ log4j-1.2.12.jar
          ∟ maven-demo01-1.0.0-SNAPSHOT.jar
      ∟ main
          ∟ maven-packagejar-exec-1.0.0-SNAPSHOT.jar
      ∟ src
          ∟ ...(打包组件的编译程序,省略)
    

    5 参考资料(感谢)

    将Maven项目打包成可执行jar文件(引用第三方jar)
    Maven打成可执行jar,包含maven依赖,本地依赖

  • 相关阅读:
    localStorage用法
    es6写法
    div滚动条
    搜索框聚焦和失焦
    初步理解前端模块化开发
    clam安装
    div行高不确定,文字和图片居中
    html页面设置<span>的高度和宽度
    一款好用的wangEditor编辑器
    3月23 防360网页的示意图
  • 原文地址:https://www.cnblogs.com/alfredinchange/p/14071682.html
Copyright © 2011-2022 走看看