IDEA+Maven 打jar包

IDEA+Maven 打jar包 (包涵依赖jar)

最新修改
以前写的打包方式可能看起来有些繁琐,这里给出进一步简洁的解决方案简单粗暴

写在前面:

​ 这两天一直在整(gu)理(dao)IDEA 用Maven打jar包,网上的教程是各式各样,但是都不能满足我的需求(或者 还没有找个正确的),因此 综合网上的内容 自己整理了一下(以下内容是在mac系统下 win 可能有一些地方不一样)。

软件环境:

​ IDEA:2017.1.5

​ Maven:3.3.9

打jar包:

  • IDEA 自带的打包工具使用

    • 打无依赖jar包

      1. 如果工程目录中有以下文件夹 删掉
        这里写图片描述
    1. 点击工程上方【File】菜单选择【Project Structure】
      这里写图片描述
    2. 点击【+】 选择【JAR】,【From modules with dependencies】点击【ok】
      这里写图片描述
    3. 点击【1】选择你要打包的Module,点击【2】选择你的主类(也就是你的程序的入口)然后点击【ok】这里写图片描述
    4. 点击【ok】
      这里写图片描述
    5. 【1】是要打的jar包的名字,【2】是jar包的输出路径,【3】是程序所需要的jar依赖,【4】是程序主类的名称。因为这里是打没有依赖的jar包,所以将【3】里面不需要的jar包删掉就行。最后点击【ok】这里写图片描述
    6. 然后就会生成一个META-INF的文件夹,里面就是一些配置属性
    • 打包涵依赖jar包
      对以上的方式中的步骤6中 不做任何修改,然后执行步骤7

  • Maven 打包
    • 打无依赖jar包

      1. 在pom.xml 文件里加入

         <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-jar-plugin</artifactId>
              <version>2.4</version>
              <configuration>
                <archive>
                      生成的jar中,不要包含pom.xml和pom.properties这两个文件
                  <addMavenDescriptor>false</addMavenDescriptor>
                  <manifest>
                        是否要把第三方jar放到manifest的classpath中
                    <addClasspath>true</addClasspath>
                       生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/
                    <classpathPrefix>lib/</classpathPrefix>
                        应用的main class
                    <mainClass>com.yourClass</mainClass>
                  </manifest>
                </archive>
                    过滤掉不希望包含在jar中的文件
                <excludes>
                  <exclude>${project.basedir}/xml/*</exclude>
                </excludes>
             </configuration>
         </plugin> 
        
      2. 点开Maven管理工具
        这里写图片描述

      3. 点击【package】
        这里写图片描述

      4. 等运行完以后就会生成jar包了
        这里写图片描述

    • 打包涵依赖jar包
      第一种方法
      1. 在pom.xml文件中写入

        <build>
           <plugins>
            <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-compiler-plugin</artifactId>
              <version>3.1</version>
            </plugin>
            <plugin>
              <artifactId>maven-assembly-plugin</artifactId>
              <configuration>
                <archive>
                  <manifest>
                    <mainClass>com.test.app</mainClass>
                  </manifest>
                </archive>
                <descriptorRefs>
                  <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
              </configuration>
              <!--下面是为了使用 mvn package命令,如果不加则使用mvn assembly-->
              <executions>
                <execution>
                  <id>make-assemble</id>
                  <phase>package</phase>
                  <goals>
                    <goal>single</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
           </plugins>
        </build>
      
      1. 然后执行上面【Maven 打无依赖包】步骤2到步骤4

      第二种方法

      1. 在pom.xml文件中写入
        <plugin>
         <groupId>org.apache.maven.plugins</groupId>
          <artifactId>maven-jar-plugin</artifactId>
          <version>2.4</version>
          <configuration>
            <archive>
                 <!-- 生成的jar中,不要包含pom.xml和pom.properties这两个文件-->
              <addMavenDescriptor>false</addMavenDescriptor>
              <manifest>
                    <!--是否要把第三方jar放到manifest的classpath中-->
                <addClasspath>true</addClasspath>
                   <!--生成的manifest中classpath的前缀,因为要把第三方jar放到lib目录下,所以classpath的前缀是lib/-->
                <classpathPrefix>lib/</classpathPrefix>
                   <!-- 应用的main class-->
                <mainClass>com.yourClass</mainClass>
              </manifest>
            </archive>
              <!--  过滤掉不希望包含在jar中的文件-->
            <excludes>
              <exclude>${project.basedir}/xml/*</exclude>
            </excludes>
         </configuration>
        </plugin>
        
        <plugin>
              <groupId>org.apache.maven.plugins</groupId>
              <artifactId>maven-assembly-plugin</artifactId>
              <version>2.4</version>
              <configuration>
                <descriptors>
                  <descriptor>src/main/assembly/package.xml</descriptor>
                </descriptors>
              </configuration>
              <executions>
                <execution>
                  <id>make-assembly</id>
                  <phase>package</phase>
                  <goals>
                    <goal>single</goal>
                  </goals>
                </execution>
              </executions>
            </plugin>
        
      2. 创建【src/main/assembly】目录
      3. 创建package.xml文件
        <assembly>
          <id>bin</id>
          <!-- 最终打包成一个用于发布的zip文件 -->
          <formats>
              <format>zip</format>
          </formats>
          <!-- Adds dependencies to zip package under lib directory -->
          <dependencySets>
              <dependencySet>
                  <!--
                     不使用项目的artifact,第三方jar不要解压,打包进zip文件的lib目录
                 -->
                  <useProjectArtifact>false</useProjectArtifact>
                  <outputDirectory>lib</outputDirectory>
                  <unpack>false</unpack>
              </dependencySet>
          </dependencySets>
        
          <fileSets>
              <!-- 把项目相关的说明文件,打包进zip文件的根目录 -->
              <fileSet>
                  <directory>${project.basedir}</directory>
                  <outputDirectory>/</outputDirectory>
                  <includes>
                      <include>README*</include>
                      <include>LICENSE*</include>
                      <include>NOTICE*</include>
                  </includes>
              </fileSet>
        
              <!-- 把项目的配置文件,打包进zip文件的config目录 -->
              <fileSet>
                  <directory>${project.basedir}/src/main/config</directory>
                  <outputDirectory>config</outputDirectory>
                  <includes>
                      <include>*.xml</include>
                      <include>*.properties</include>
                  </includes>
              </fileSet>
        
              <!-- 把项目的脚本文件目录( src/main/scripts )中的启动脚本文件,打包进zip文件的跟目录 -->
              <fileSet>
                  <directory>${project.build.scriptSourceDirectory}</directory>
                  <outputDirectory></outputDirectory>
                  <includes>
                      <include>startup.*</include>
                  </includes>
              </fileSet>
        
              <!-- 把项目的脚本文件(除了启动脚本文件),打包进zip文件的script目录 -->
              <fileSet>
                  <directory>${project.build.scriptSourceDirectory}</directory>
                  <outputDirectory></outputDirectory>
        
                  <excludes>
                      <exclude>startup.*</exclude>
                  </excludes>
              </fileSet>
        
              <!-- 把项目自己编译出来的jar文件,打包进zip文件的根目录 -->
              <fileSet>
                  <directory>${project.build.directory}</directory>
                  <outputDirectory></outputDirectory>
                  <includes>
                      <include>*.jar</include>
                  </includes>
              </fileSet>
          </fileSets>
        </assembly>
        
      4. 将【package.xml】文件放入【assembly】文件夹中
        这里写图片描述
      5. 然后执行上面【Maven 打无依赖包】步骤2到步骤4

如果要打包scala代码需要添加插件:
方案一:

 <plugin>
     <groupId>net.alchim31.maven</groupId>
     <artifactId>scala-maven-plugin</artifactId>
     <version>3.4.0</version>
     <executions>
         <execution>
             <goals>
                 <goal>compile</goal>
                 <goal>testCompile</goal>
             </goals>
         </execution>
     </executions>
 </plugin>

方案二:

	<plugin>
		<groupId>org.scala-tools</groupId>
		<artifactId>maven-scala-plugin</artifactId>
 		<version>2.15.2</version>
 		<executions>
         	<execution>
            	 <goals>
                 	<goal>compile</goal>
                 	<goal>testCompile</goal>
            	 </goals>
         	</execution>
     	</executions>
	</plugin>

推荐方案一,方案二中的插件最新更新日期是2011年

简单粗暴
将下面的任意一种方案放到pom文件中,并修改成自己项目中的MainClass即可

</plugins>
    </build>
     方案一 or 方案二
     <build>
<plugins>
  • 方案一:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-shade-plugin</artifactId>
    <version>3.0.0</version>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>shade</goal>
            </goals>
            <configuration>
                <transformers>
                    <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                        <mainClass>com.test.MainClass</mainClass>   <!--带有包路径的MainClass -->
                    </transformer>
                </transformers>
            </configuration>
        </execution>
    </executions>
</plugin>
  • 方案二:
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-assembly-plugin</artifactId>
    <version>2.4</version>
    <configuration>
        <archive>
            <manifest>
                <mainClass>com.test.MainClass</mainClass>   <!--带有包路径的MainClass -->
            </manifest>
        </archive>
        <descriptorRefs>
            <descriptorRef>jar-with-dependencies</descriptorRef>
        </descriptorRefs>
    </configuration>

    <executions>
        <execution>
            <id>make-assembly</id>
            <phase>package</phase>
            <goals>
                <goal>single</goal>
            </goals>
        </execution>
    </executions>
</plugin>

注:

本文属于作者原创,如需转载,请注明。

内部如果引用的文字,连接,图片等资源存在侵犯原作者的情况,请联系本人,立即删除。

已标记关键词 清除标记
相关推荐
©️2020 CSDN 皮肤主题: 大白 设计师:CSDN官方博客 返回首页