• Intellij IDEA 打包jar的多种方式


    IDEA打包jar包的多种方式

    • 用IDEA自带的打包形式
    • 用Maven插件maven-shade-plugin打包
    • 用Maven插件maven-assembly-plugin打包

    1.view-》Tool Buttons 调出maven projects 

    点击界面最右侧的选项:Maven Projects -> 双击package 

    用IDEA自带的打包形式

    1.File->Project Structure->Artifacts->Add->Jar->From modules with dependencies

    2.配置

    第一步选择Main函数执行的类。 
    第二步选择如图的选项,目的是对第三方Jar包打包时做额外的配置,如果不做额外的配置可不选这个选项(但不保证打包成功) 
    第三步需要在src/main目录下,新建一个resources目录,将MANIFEST.MF文件保存在这里面,因为如果用默认缺省值的话,在IDEA12版本下会有bug。

    这里写图片描述

    点击ok

    3.把第三方jar包放入lib目录

    这里写图片描述

    这里写图片描述

    4.build

    这里写图片描述

    这里写图片描述

    5.在out/artifacts目录下生成jar包

    这里写图片描述

    用maven-shade-plugin打包

    上面的打包过程实在是过于的繁琐,而且也没有利用到maven管理项目的特色。为此,我们这里利用maven中的maven-shade-plugin插件。在pom.xml中,我们加入如下的信息来加入插件。

    1.加入maven-shade-plugin插件

    <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>1.4</version>
                    <configuration>
                        <createDependencyReducedPom>true</createDependencyReducedPom>
                    </configuration>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <transformer
                                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <mainClass>Main.Main</mainClass>
                                    </transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>

    这里面配置了一个`configuration`标签内容,在此标签下面 有一个transformer标签,用来配置Main函数的入口( <mainClass>Main.Main</mainClass>),当然此标签内容很复杂,不是上面写的那么简单,上面之所以如此简单,是因为在所有类中(包括第三方Jar)只有一个Main方法。如果第三方jar中有Main方法,就要进行额外的配置,上面这么配置,不一定能执行成功。

    2.使用maven命令打包

    mvn clean compile //清除之前target编译文件并重新编译
    mvn clean package //对项目进行打包(因为配置过插件,所以jar包是可执行的)
    mvn clean install //安装项目,然后就可以使用了

    可以通过自带的maven管理工具代替执行上面的命令

    这里写图片描述

    注意: 想要忽略测试用例

    mvn package -DskipTests

    或者

    mvn package -Dmaven.test.skip=true

    maven.test.skip同时控制maven-compiler-plugin和maven-surefire-plugin两个插件的行为,即跳过编译,又跳过测试

    也可以使用插件

    <plugin>  
        <groupId>org.apahce.maven.plugins<groupId>  
        <artifactId>maven-surefire-plugin</artifactId>  
        <version>2.5</version>  
        <configuration>  
            <includes>  
                <include>**/*Tests.java</include>  
            </includes>  
        </configuration>          
    </plugin>  

    使用* / Test.Java 来匹配所有以Tests结尾的Java类。两个星号*用来匹配任意路径,一个星号用来获取除路径风格符外的0个或多个字符。还可使用excludes来排除Test类

    在target/目录下生成jar包

    这里写图片描述

    使用java -jar xxx.jar运行即可

    用maven-assembly-plugin打包

    上面的方法,我们还需要点击很多命令去打包。这次利用一个新的插件,可以打包更简单。同样,在pom.xml中加入如下代码。上文的maven-shade-plugin插件代码可以删除。最好不要写2个插件代码。

     <plugin>
       <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-assembly-plugin</artifactId>
        <version>2.2-beta-5</version>
        <configuration>
            <descriptors>
                <descriptor>src/main/resources/assembly.xml</descriptor>
            </descriptors>
            <archive>
                <manifest>
                    <mainClass>Main.Main</mainClass>
                </manifest>
            </archive>
        </configuration>
    </plugin>
    <assembly>
        <id>j2se-assembly</id>
        <formats>
            <format>jar</format>
        </formats>
        <dependencySets>
            <dependencySet>
                <outputDirectory>lib</outputDirectory>
            </dependencySet>
        </dependencySets>
    </assembly>

    这里同样配置了一个manifest标签来配置Main函数的入口。然后通过如下指令来实现打包。

    mvn assembly:assembly

    或者 
    这里写图片描述

    ========使用mvn assembly:assembly运行会出现Error reading assemblies: No assembly descriptors found 异常,但是使用mvn package命令打包没问题 不知道为什么(꒪⌓꒪)=======

  • 相关阅读:
    作业DAY002
    作业DAY001
    作业 5:词频统计——增强功能
    在JdbcTemplate里面关于queryForMap返回值的疑问
    直接打印map, 为什么能直接输出value
    JdbcTemplate jar包 下载
    edge 修改链接打开方式
    Java中的判断实例
    关于Junit4 和 Junit5.4
    关于函数式接口, printable 自定义
  • 原文地址:https://www.cnblogs.com/kaola8023/p/8394723.html
Copyright © 2020-2023  润新知