精华内容
下载资源
问答
  • 本篇文章总结出用IDEA打包jar包的多种方式。项目打包Jar包可以参考如下形式:用IDEA自带的打包形式;用Maven插件maven-shade-plugin打包;用Maven插件maven-assembly-plugin打包。下面跟着小编一起来看下吧
  • 主要介绍了如何用Intellij idea 2020打包jar的方法步骤,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了IDEA打包jar-解决找不到或无法加载主类 main的问题,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 主要介绍了idea打包java程序(包含依赖的所有jar包),文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 主要介绍了浅谈IDEA2018打包可执行jar包的流程,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 详解ideajar包

    2018-06-03 19:02:48
    使用idea2017.3 版本打jar包,适用普通java工程(非maven)
  • Idea打包jar包

    2019-04-13 20:56:34
    利用idea本身软件打包方式打包
  • IDEA 打包 jar 记录

    2020-12-02 15:42:56
    打包 jar 流程2. 可能遇到的问题2.1 MANIFEST.MF 文件已经存在报错2.2 已经删除的 jar 配置再次打开时依然存在 前言 最近在了解 Java Agent 探针技术,在做 demo 的时候需要把代码打包jar ,通过 java -...

    前言

    最近在了解 Java Agent 探针技术,在做 demo 的时候需要把代码打包成 jar 包,然后通过 java -javaagent:xxx -jar xxx 命令启动才能测试代码是否正确修改了字节码,因此有了这篇文章

    1. 打包 jar 包流程

    1. 首先直接点击图示位置(也可以点击File --> Project Structure),打开项目结构配置
      在这里插入图片描述

    2. 在打开的界面选择 Artifacts点击加号+ --> 选择 JAR–> 选择 From modules with depenencies 新建 jar 包配置
      在这里插入图片描述

    3. 新建 jar 包配置界面如下所示,其中从上往下红框标记的都是需要注意的

      1. 首先选中需要打包的 Module,也就是对应模块
      2. 选中该模块中的主类,点击文件夹图标会自动检测这个模块中存在的主类,选择即可
      3. 选择选中模块依赖的第三方 jar 包在新的 jar 包中的存在形式,主要有两种选择:
        1. extract to the target JAR把模块依赖的 jar 包解压,将其内部包含的 class 文件直接合并到目标 jar 文件中。这种方式打包出来的 jar 文件通过 IDEA 查看,会发现其内部不仅包含我们指定的模块的源文件夹,也包含了依赖的 jar 包中的文件夹
        2. copy to the output directory and link via manifest: 将模块依赖的 jar 包直接打包进目标 jar 包内,第三方 jar 包依然独立存在。这种方式需要指定第三方 jar 包在目标 jar 包中的 Class Path,否则程序启动时无法正确处理依赖
      4. 选择一个创建 MANIFEST.MF 文件的文件夹,如果该文件夹下已经有 MANIFEST.MF 文件了则会在点击 OK 完成配置时报错,原因及解决方式见下节 2.1 MANIFEST.MF 文件已经存在报错

      在这里插入图片描述

    4. 基本配置完毕则进入下一步,界面如下所示

      1. 左侧选中新建的 jar 配置,右侧红框处都是可以修改的部分,如 Name(jar 配置名称)Output directory(打包出的 jar 包的存在文件夹)
      2. Available Elements(可用元素) 用于选择需要打包进 jar 包中的文件,双击该选项下文件夹中的文件即可将其添加到 jar 包中
      3. 最后 Class Path 用于配置目标 jar 包中依赖的 jar 包,如果在上一个步骤中选择了 copy to the output directory and link via manifest 则一定要配置,配置值为依赖 jar 包在目标 jar 包中的相对路径,否则省略

      在这里插入图片描述

    5. 配置完成,就会在上文步骤3第四步指定的文件夹中创建一个MANIFEST.MF 文件,打开该文件可以进行相关配置,比如笔者的配置如下,可以根据自身模块情况做修改
      在这里插入图片描述

    6. 最后一步,点击Build–>Build Artifacts,在弹窗中选中目标 jar 包配置,然后在其右侧弹框中选择 Build 或者 ReBuild点击即可进行编译打包。打包完成后,可以在步骤4配置的Output directory(打包出的 jar 包的存在文件夹) 中找到目标 jar。笔者以 extract to the target JAR 方式处理第三方 jar 包,可以看到其依赖的 jar 包中的文件都合并到了目标 jar 包中

    7. 启动目标 jar 包,只需要在终端中执行 java -jar 命令即可。以笔者为例,启动命令为

      java  -jar /Users/xxx/workspace/demo/out/artifacts/src/src.jar
      

    2. 可能遇到的问题

    本节记录在打包过程中遇到的问题,给自己做个笔记,也希望读者可以避免踩坑

    2.1 MANIFEST.MF 文件已经存在报错

    这个错误会在新建 jar 包配置时发生,具体如下截图。其实错误信息已经写的很明白,就是在这个目录下 MANIFEST.MF 文件已经存在。一开始遇到这个错误可能会摸不着头脑,因为一般在 eclipse 下打包 jar 都需要我们手动创建 MANIFEST.MF 文件,而 IDEA 其实会自动帮助使用者创建 MANIFEST.MF 文件,当指定文件夹下已经有 MANIFEST.MF 文件则会报出这个错误。一般解决方法如下:

    1. 指定另一个文件夹作为 MANIFEST.MF 文件存在目录
    2. 将原文件夹下的 MANIFEST.MF 文件删除

    自动创建的 MANIFEST.MF 文件不符合要求的时候,只要用户继续修改这个文件即可

    在这里插入图片描述

    2.2 已经删除的 jar 包配置再次打开时依然存在

    这个问题的表现为已经点击了 - 按钮,删除了一个命名为 src的 jar 配置,但是再次打开该界面的时候这个配置又出现了

    在这里插入图片描述

    这个问题产生原因很简单,IDEA 会将创建过的 jar 配置缓存在 .idea 文件夹中,只要找到该文件夹,删除对应的 xml 文件即可,如下图所示

    在这里插入图片描述

    展开全文
  • 主要给大家介绍了关于将idea工程打包jar文件的相关资料,文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面来一起学习学习吧
  • IDEA打包jar包详尽流程

    万次阅读 多人点赞 2019-04-08 23:11:59
    打包流程 1. 打开菜单栏File-Project Structure 2. 点击Artifacts 3. 点击 "+" - JAR - From module with depenencies 4. 后弹出如下界面,自此开始,各种问题就来了 首先Module中,我SocketDemo的...

    打包流程

    1. 打开菜单栏File-Project Structure

         

    2. 点击Artifacts

        

    3. 点击 "+" - JAR - From module with depenencies

        

    4. 后弹出如下界面,自此开始,各种问题就来了

       

    • 首先Module中,我SocketDemo的Module含有SocketDemo、SocketDemo_main、SocketDemo_test三个,一定要选择main

            

    • Main Class选择自己要打包的类(一个Module一个包下可能有多个类需要打包),我做了一个测试类Test

            

    • JAR files from libraries 第一个选项只生成主类(main)的jar包,第二个选项不太清楚,看别的博客说是生成的jar包包含Module中引用的所有jar包,但选择第二个很大可能在以后的运行中出现问题,我反正是选的第一个

            

    • 接下来是 MF文件的存放目录,重点。不能使用默认目录,必须自定义目录,不然会运行错误,也不能使用src/main/resources这个目录(这个目录是我建project时自带的,也可能没有),自定义目录也不能在src/main下建名为resources的文件。于是我新建了resource

           

    • 最终是这样的,点击OK

           

    • 此时应该也必须有META-INF此文件,不然会运行错误。若JAR files from libraries选择src/main/resources目录,是没有META-INF文件的。Output directory是jar包的保存目录

           

    • 点击OK

    5. 点击Build-Artifacts

        

    6. 点击Build

        

    7. 此时Output directory便出现了jar包

       

    8. 打开CMD窗口,运行jar包。一定要cd到jar包所在目录(Output directory),一定要使用java - jar jar包名称

        

    结束。欢迎一起交流~~~

    展开全文
  • 主要介绍了idea+maven打jar包的两种方式,本文通过图文并茂的形式给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • 主要介绍了idea 打包jar运行报 "XXX中没有主清单属性",文中通过示例代码介绍的非常详细,对大家的学习或者工作具有一定的参考学习价值,需要的朋友们下面随着小编来一起学习学习吧
  • 在本篇文章里小编给大家分享的是关于如何将IDEA打成jar包并在windows后台运行知识点,需要的朋友们可以学习参考下。
  • 增加IDEA有关eclipse常用的快捷键操作,方便eclispe开发者转IDEA开发
  • IDEA打包jar包的多种方式

    万次阅读 2017-12-13 22:20:26
    本篇文章总结出用IDEA打包jar包的多种方式。项目打包Jar包可以参考如下形式:用IDEA自带的打包形式;用Maven插件maven-shade-plugin打包;用Maven插件maven-assembly-plugin打包。下面跟着小编一起来看下吧 ...
    本篇文章总结出用IDEA打包jar包的多种方式。项目打包Jar包可以参考如下形式:用IDEA自带的打包形式;用Maven插件maven-shade-plugin打包;用Maven插件maven-assembly-plugin打包。下面跟着小编一起来看下吧

    这里总结出用IDEA打包jar包的多种方式,以后的项目打包Jar包可以参考如下形式:

    1. 用IDEA自带的打包形式
    2. 用Maven插件maven-shade-plugin打包
    3. 用Maven插件maven-assembly-plugin打包

    用IDEA自带的打包方式:

    打开IDEA的file -> Project Structure,进入项目配置页面。如下图:

    点击Artifacts,进入Artifacts配置页面,点击 + ,选择如下图的选项。

    进入Create JAR from Modules页面,按照如下图配置。

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

    点击OK之后,出现如下图界面,右键点击<output root>,点击Create Directory,创建一个libs,将所有的第三方JAR放进libs目录下。

    成功之后,如下图所示:

    放入之后,点击我们要打成的jar的名字,这里面是kafka-cps.jar,选择classpath进行配置。

    编辑的结果如下:

    这里将所有的jar都写在libs/里面。点击OK,回到配置页面。

    同时还注意在配置页面,勾选build on make

    最后点击配置页面的OK,完成配置。回到IDEA,点击Build->Build Artifacts,选择build

    就会生成我们需要的jar包。其位置在项目目录的out目录下/out/artifacts/kafka_cps_jar

    下面放一个正确配置的清单文件内容

    用maven-shade-plugin打包

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

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    < 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方法,就要进行额外的配置,上面这么配置,不一定能执行成功。

    在加入这段代码到pom.xml之后,我们就可以用maven的命令去打包了。其指令如下:

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

    然后通过java -jar cps-1.0-SNAPSHOT.jar运行。

    如果使用IDEA的话,可以通过自带的maven管理工具代替执行上面的命令。如下图所示,依次点击蓝色的部分。

    用maven-assembly-plugin打包

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

    ?
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    < plugin >
        < artifactId >maven-assembly-plugin</ artifactId >
        < version >2.4</ version >
        < configuration >
         < descriptorRefs >
          < descriptorRef >jar-with-dependencies</ descriptorRef >
         </ descriptorRefs >
         < archive >
          < manifest >
    < mainClass >Main.Main</ mainClass >
          </ manifest >
         </ archive >
        </ configuration >
        < executions >
         < execution >
          < id >make-assembly</ id >
          < phase >package</ phase >
          < goals >
           < goal >single</ goal >
          </ goals >
         </ execution >
        </ executions >
       </ plugin >

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

    mvn assembly:assembly

    如果使用IDEA的话,可以通过自带的maven管理工具代替执行上面的命令。如下图所示,点击蓝色的部分。

    然后通过执行java -jar cps-1.0-SNAPSHOT-jar-with-dependencies.jar运行。



    现在基本上都是采用maven来进行开发管理,我有一个需求是需要把通过maven管理的java工程打成可执行的jar包,这样也就是说必需把工程依赖的jar包也一起打包。而使用maven默认的package命令构建的jar包中只包括了工程自身的class文件,并没有包括依赖的jar包。我们可以通过配置插件来对工程进行打包,pom具体配置如下:

    maven-assembly-plugin

    Xml代码    收藏代码
    1. <plugin>  
    2.     <artifactId>maven-assembly-plugin</artifactId>  
    3.     <configuration>  
    4.         <appendAssemblyId>false</appendAssemblyId>  
    5.         <descriptorRefs>  
    6.             <descriptorRef>jar-with-dependencies</descriptorRef>  
    7.         </descriptorRefs>  
    8.         <archive>  
    9.             <manifest>  
    10.                 <mainClass>com.chenzhou.examples.Main</mainClass>  
    11.             </manifest>  
    12.         </archive>  
    13.     </configuration>  
    14.     <executions>  
    15.         <execution>  
    16.             <id>make-assembly</id>  
    17.             <phase>package</phase>  
    18.             <goals>  
    19.                 <goal>assembly</goal>  
    20.             </goals>  
    21.         </execution>  
    22.     </executions>  
    23. </plugin>  

     

    其中<mainClass></mainClass>的值表示此工程的入口类,也就是包含main方法的类,在我的例子中就是com.chenzhou.examples.Main。配置完pom后可以通过执行mvn assembly:assembly命令来启动插件进行构建。构建成功后会生成jar包,这样我们就可以在命令行中通过java -jar XXX.jar来运行jar件了。 

     

    不过使用此插件会有一些问题:我在工程中依赖了spring框架的jar包,我打包成功后使用命令来调用jar包时报错如下(内网环境):

     

    Shell代码    收藏代码
    1. org.xml.sax.SAXParseException: schema_reference.4: Failed to read schema document 'http://www.springframework.org/schema/beans/spring-beans-3.0.xsd', because 1) could not find the document; 2) the document could not be read; 3) the root element of the document is not <xsd:schema>.  

    关于此问题报错的原因,我在网上找到一篇文章对此有比较详细的解释:http://blog.csdn.net/bluishglc/article/details/7596118 简单来说就是spring在启动时会加载xsd文件,它首先会到本地查找xsd文件(一般都会包含在spring的jar包中),如果找不到则会到xml头部定义的url指定路径下中去寻找xsd,如果找不到则会报错。

    附:在spring jar包下的META-INF文件夹中都会包含一个spring.schemas文件,其中就包含了对xsd文件的路径定义,具体如下图所示:

    spring-aop.jar包下META-INF文件夹下的内容

    图:spring-aop.jar包下META-INF文件夹下的内容

    spring.schemas文件内容

    图:spring.schemas文件内容

    由于我的工程是在内网,所以通过url路径去寻找肯定是找不到的,但是比较奇怪的是既然spring的jar包中都会包含,那为什么还是找不到呢?

      原来这是assembly插件的一个bug,具体情况参见:http://jira.codehaus.org/browse/MASSEMBLY-360

    该bug产生的原因如下:工程一般依赖了很多的jar包,而被依赖的jar又会依赖其他的jar包,这样,当工程中依赖到不同的版本的spring时,在使用assembly进行打包时,只能将某一个版本jar包下的spring.schemas文件放入最终打出的jar包里,这就有可能遗漏了一些版本的xsd的本地映射,所以会报错。

    所以一般推荐使用另外的一个插件来进行打包,插件名称为:maven-shade-plugin,shade插件打包时在对spring.schemas文件处理上,它能够将所有jar里的spring.schemas文件进行合并,在最终生成的单一jar包里,spring.schemas包含了所有出现过的版本的集合,要使用shade插件,必须在pom进行如下配置:

     

    Xml代码    收藏代码
    1. <plugin>  
    2.     <groupId>org.apache.maven.plugins</groupId>  
    3.     <artifactId>maven-shade-plugin</artifactId>  
    4.     <version>1.4</version>  
    5.     <executions>  
    6.         <execution>  
    7.             <phase>package</phase>  
    8.             <goals>  
    9.                 <goal>shade</goal>  
    10.             </goals>  
    11.             <configuration>  
    12.                 <transformers>  
    13.                     <transformer  
    14.                         implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">  
    15.                         <resource>META-INF/spring.handlers</resource>  
    16.                     </transformer>  
    17.                     <transformer  
    18.                         implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">  
    19.                         <mainClass>com.chenzhou.examples.Main</mainClass>  
    20.                     </transformer>  
    21.                     <transformer  
    22.                         implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">  
    23.                         <resource>META-INF/spring.schemas</resource>  
    24.                     </transformer>  
    25.                 </transformers>  
    26.             </configuration>  
    27.         </execution>  
    28.     </executions>  
    29. </plugin>  

    上面配置文件中有一段定义:

     

    Xml代码    收藏代码
    1. <transformer  
    2.     implementation="org.apache.maven.plugins.shade.resource.AppendingTransformer">  
    3.     <resource>META-INF/spring.schemas</resource>  
    4. </transformer>  

      上面这段配置意思是把spring.handlers和spring.schemas文件以append方式加入到构建的jar包中,这样就不会存在出现xsd找不到的情况。

    配置完pom后,调用mvn clean install命令进行构建,构建成功后打开工程target目录,发现生成了2个jar包,一个为:original-XXX-0.0.1-SNAPSHOT.jar,另一个为:XXX-0.0.1-SNAPSHOT.jar,其中original...jar里只包含了工程自己的class文件,而另外的一个jar包则包含了工程本身以及所有依赖的jar包的class文件。我们只需要使用第二个jar包就可以了。

    参考资料:

    http://hi.baidu.com/yuzhi2217/item/2c1714363f25c4f62684f442

    http://blog.csdn.net/bluishglc/article/details/7596118

    http://jira.codehaus.org/browse/MASSEMBLY-360


    展开全文
  • 主要介绍了在idea中将java项目中的单个类打包jar包操作,具有很好的参考价值,希望对大家有所帮助。一起跟随小编过来看看吧
  • 网上搜了一圈,给的步骤不对,自己测试了下,记录成功的步骤。 1、把第三方包加lib 如图,在... 3、编译 会在Artifacts配置(上上图)里output directory对应的路径下生成jar包。用压缩文件打开可以看到目录com如下

    网上搜了一圈,给的步骤不对,自己测试了下,记录成功的步骤。

    1、把第三方包加lib

    如图,在project structure里将第三方包加到libraries里

    2、添加Artifacts

    如图,在project structure里添加Artifacts,如图选择。

    Artifacts的配置如下图,Main Class要自己选择,JAR Files From libraries要选择第一个,这个在其他文章里都说选第二个,那样会是自己的代码打一个包,第三方包在同一个目录下。

    配置好后如下图,注意三个红框位置的显示应该如下图,不然编译出来会报错。

    中间那个红框下两个都是jar的话,运行时会报错Error: Invalid or corrupt jarfile KafkaParser_jar.jar。

    如果第三个红框里的Main Class缺失的话会报错KafkaParser.jar中没有主清单属性。

    3、编译

    会在Artifacts配置(上上图)里output directory对应的路径下生成jar包。用压缩文件打开可以看到目录com如下

     

    展开全文
  • idea springboot打包

    2018-06-22 18:14:51
    idea springboot 打jar包 、打war包 ,只是为了快速开发,节约时间。只是为了快速开发,节约时间。只是为了快速开发,节约时间
  • 本篇文章主要介绍了详解IDEA中MAVEN项目打JAR包的简单方法,小编觉得挺不错的,现在分享给大家,也给大家做个参考。一起跟随小编过来看看吧
  • Idea springboot项目打包jar包麻瓜教程: 第一步:file-->Project Structure 第二步:Artifacts-->JAR-->From modules with dependencies... 第三步:点击From modules with dependencies......
  • IDEA打包指定类为jar包

    2021-07-09 11:36:42
    1,File–>project Structure–>...6,到这里已经可以在Jar包生成目录找到Jar包了,但是直接运行会报错:“找不到或无法加载主类”,需要使用解压工具删除指定文件 7,到此可以正常运行了 ...
  • idea中按照顺序打好jar包后,出现问题 查查查 解决方式1: jar中没有主清单属性【解决办法】 背景 在使用maven打包项目的时候,mvn clean package ,报了一个jar包中没有主清单属性如何解决错误;很明显是没有...
  • IDEA打包jar包并运行

    2018-10-12 15:58:28
    主要看图: 打包: 项目右键 -&gt; 会生成METE-INF和out两个文件夹: ...命令窗口切换到项目的jar包目录下: 查看可见生成的jar包: 运行:java -jar mall.jar 运行成功: ...
  • 主要介绍了IDEA对使用了第三方依赖jar包的非Maven项目打jar包的问题,本文给大家介绍的非常详细,对大家的学习或工作具有一定的参考借鉴价值,需要的朋友可以参考下
  • IDEA打包jar包 命令

    千次阅读 2018-11-26 14:37:00
    将项目打包jar包,如下(不直接用maven管理下的命令是因为可能会导致添加的相关项目的依赖不存在)
  • 首先查看提示: 打包过程如下:File ->...引用一篇文章的解决办法:Intellij IDEA 封装Jar包(提示错误: 找不到或无法加载主类) 那么如何能解决这个问题呢?百度找了很多发现其实配置都不准确,最终发现...
  • idea打包jar的多种方式(总结-共三种)

    万次阅读 2018-07-19 10:40:55
    这里总结出用IDEA打包jar包的多种方式,以后的项目打包Jar包可以参考如下形式: 用IDEA自带的打包形式 用Maven插件maven-shade-plugin打包 用Maven插件maven-assembly-plugin打包 用IDEA自带的打包方式: 打开...

空空如也

空空如也

1 2 3 4 5 ... 20
收藏数 40,261
精华内容 16,104
关键字:

idea打包jar包