IDEA打包jar包的多种方式

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

1.view-》Tool Buttons 调出maven projects 

idea 中java打包的jar包很大 idea 打包成jar包_idea 中java打包的jar包很大

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

idea 中java打包的jar包很大 idea 打包成jar包_测试_02

 

用IDEA自带的打包形式

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

idea 中java打包的jar包很大 idea 打包成jar包_开发工具_03

 

2.配置

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

idea 中java打包的jar包很大 idea 打包成jar包_idea 中java打包的jar包很大_04

点击ok

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

idea 中java打包的jar包很大 idea 打包成jar包_maven_05

idea 中java打包的jar包很大 idea 打包成jar包_开发工具_06

4.build

idea 中java打包的jar包很大 idea 打包成jar包_测试_07

idea 中java打包的jar包很大 idea 打包成jar包_java_08

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

idea 中java打包的jar包很大 idea 打包成jar包_idea 中java打包的jar包很大_09

用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管理工具代替执行上面的命令

idea 中java打包的jar包很大 idea 打包成jar包_java_10

注意: 想要忽略测试用例

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包

idea 中java打包的jar包很大 idea 打包成jar包_idea 中java打包的jar包很大_11

使用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

 

或者 

idea 中java打包的jar包很大 idea 打包成jar包_测试_12

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