zoukankan      html  css  js  c++  java
  • java工程打成jar包

    在java工程打包的过程中遇到过不少问题,现在总结一下。一种是典型的maven工程打包,依赖的jar包全都在pom.xml中指定,这种方式打包很方便;另一种是依赖了本机jar包(不能通过pom.xml指定),我目前实践结果是只能手动进行打包。

    1、依赖的jar包全由pom文件指定

    使用maven的assembly插件进行打包,需要在pom文件中进行插件配置。基本配置如下,在终端中执行mvn package,即可在target目录生成名字为{artifactId}-jar-with-dependencies.jar 的jar文件,该jar文件中包含了所有依赖的jar包(解压后的)。

    该插件还有很多其他的高级设置,每每总是搞错,后面等自己摸透了,会慢慢增加一些高级设置的说明。

     <plugins>
         <plugin>
             <groupId>org.apache.maven.plugins</groupId>
             <artifactId>maven-assembly-plugin</artifactId>
             <version>2.5</version>
             <configuration>
                 <descriptorRefs>
                     <descriptorRef>jar-with-dependencies</descriptorRef>
                 </descriptorRefs>
                 <archive>
                     <manifest>
                         <mainClass>com.sym.storm.WordCountTopology</mainClass>
                     </manifest>
                 </archive>
             </configuration>
             <executions>
                 <execution>
                     <id>make-assembly</id>
                     <phase>package</phase>
                     <goals>
                         <goal>single</goal>
                     </goals>
                 </execution>
             </executions>
         </plugin>
     </plugins>

    最终生成的jar包中的依赖的jar包都是解压后的,这是由jar-with-dependencies的默认设置决定的。若需要保持依赖的jar包不解压,则需要进行一下设置:

    • 新建src/main/assembly目录,并在其中新建src.xml文件,并在该文件中写入如下内容:
    <assembly xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0"  
      xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"  
      xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.0 http://maven.apache.org/xsd/assembly-1.1.0.xsd">  
      <id>jar-with-dependencies</id>  
      <formats>  
        <format>jar</format>  
      </formats>  
      <includeBaseDirectory>false</includeBaseDirectory>  
      <dependencySets>  
        <dependencySet>  
          <unpack>false</unpack>  
          <scope>runtime</scope>  
        </dependencySet>  
      </dependencySets>  
      <fileSets>  
        <fileSet>  
          <directory>${project.build.outputDirectory}</directory>  
        </fileSet>  
      </fileSets>  
    </assembly>  

    默认的unpack设置是true(即解压),只需要修改为false即可。

    • 然后需要将之前pom文件中的descriptorRef替换为如下descriptor设置。再执行mvn package命令。解压生成的jar包,可看到依赖的jar包都是未解压的。
    • <descriptors>
        <descriptor>jar-with-dependencies</descriptorRef>
      </descriptors>

    2、依赖本地jar包(非pom指定)

    之前在网上搜了很多的教程,教程里也有很多是使用assembly插件来,但实践之后都未果,后来只能用最原始的手动导jar包的方式来实现。

    • 用编辑器导成jar包(eclipse和intellij不同)。Main方法根据实际需求来指定。
    • 修改MANIFEST.MF。MANIFEST.MF文件描述了jar包的相关信息,包括jar包的版本、创建人和类搜索路径等。如果是可执行jar包,会包含Main-Class属性,表明Main方法入口。Class-Path指定依赖的jar包,当前路径是jar包所在目录,若要引用当前目录下一个子目录中的jar包,使用以下格式:子目录/jar包名称,多个jar包之间用空格分隔,在任何平台上路径分割符都是'/'。

    具体操作如下:在导出的jar包上右键,选择用WinRAR打开,进入META_INF目录,打开MANIFEST.MF文件,添加依赖的jar包的名字,名字之前用空格分隔,如

    Class-Path: lib/***1.jar lib/***2.jar

  • 相关阅读:
    java循环遍历枚举类型,Enum根据文本获取Key
    java使用poi解析或处理excel的时候,如何防止数字变成科学计数法的形式
    jdk8的特性stream().map()
    jrebel2019注册码
    Vue刷新后页面后报404的问题
    JS中对List、Map的各种遍历方式
    防止vue重复点击
    elementUI 按钮美化
    Vue路由<router-link>属性的使用
    Maven 打包com.mongodb does not exist
  • 原文地址:https://www.cnblogs.com/yaminLearn/p/6273972.html
Copyright © 2011-2022 走看看