maven 模块打包时包含依赖和打包可执行的jar

这篇具有很好参考价值的文章主要介绍了maven 模块打包时包含依赖和打包可执行的jar。希望对大家有所帮助。如果存在错误或未考虑完全的地方,请大家不吝赐教,您也可以点击"举报违法"按钮提交疑问。

maven 模块打包

1)maven 模块打包jar文件时,指定包含依赖(with-dependencies);
2)maven 模块打包jar文件时,指定入口MainClass、打包生成可执行的jar;

vi qftools/common/src/main/java/com/xxx/qftools/common/Main.java

package com.xxx.qftools.common;

public class Main {
    public static void main(String args[]) {
            System.out.printf("Hello");
    }
}

vi qftools/common/pom.xml
  ...
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-install-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
      </plugin>
      <plugin>
        <groupId>org.codehaus.mojo</groupId>
        <artifactId>exec-maven-plugin</artifactId>
      </plugin>
      <!-- maven-shade-plugin: 将所有依赖包都打进jar包中,jar命名带后缀 shaded-with-dependency -->
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-shade-plugin</artifactId>
        <version>2.4.3</version>
        <executions>
          <execution>
            <phase>package</phase>
            <goals>
              <goal>shade</goal>
            </goals>
            <configuration>
              <!-- 设置将依赖整合到一个自定义名称的 JAR 包。如果不设置此项,
                依赖将整合到 Maven 无插件时的默认 JAR 包,并生成一个前缀为 original- 的无依赖 JAR 包。
              -->
              <shadedArtifactAttached>true</shadedArtifactAttached>
              <!-- 设置生成的 JAR 包后缀名 -->
              <shadedClassifierName>shaded-with-dependencies</shadedClassifierName>
              <!-- 设置程序运行入口 -->
              <transformers>
                <transformer
                        implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                  <mainClass>com.xxx.qftools.common.Main</mainClass>
                </transformer>
              </transformers>
            </configuration>
          </execution>
        </executions>
      </plugin>
    </plugins>
  </build>
  
  编译打包后生成2个jar文件:
  common-1.0-SNAPSHOT-shaded-with-dependencies.jar (打包包含了所有依赖)
  common-1.0-SNAPSHOT.jar (不包含依赖)

  执行jar(with-dependencies的指定拉MainClass的jar,执行时无需再指定MainClass):
  java -jar common-1.0-SNAPSHOT-shaded-with-dependencies.jar
  
  执行jar(未指定MainClass的jar,执行时必须 -cp 指定MainClass):
  java -cp common-1.0-SNAPSHOT.jar com.xxx.qftools.common.Main
  
  如果  java -jar 执行 未指定MainClass的jar时,会报错jar中没有主清单属性(即:jar文件中的META-INF/MANIFEST.MF文件中没有 Main-Class: com.xxx.qftools.common.Main)
  java -jar common-1.0-SNAPSHOT.jar                               
  common-1.0-SNAPSHOT.jar中没有主清单属性
 

另外:

java -jar common-1.0-SNAPSHOT-shaded-with-dependencies.jar

如果有依赖的lib需要加载,则执行:
java -Xbootclasspath/a:dep.jar -jar common-1.0-SNAPSHOT-shaded-with-dependencies.jar

注意:-classpath 没有用,如果执行:java -classpath dep.jar -jar common-1.0-SNAPSHOT-shaded-with-dependencies.jar 无效。原因是使用 classpath 指定的 jar 是由 AppClassloader 来加载,java 命令加了-jar 参数之后,AppClassloader 就只关注 -jar 指定的 jar 文件范围内的 class 了,classpath 参数失效。
可以使用下面参数指定依赖jar的加载:
-Xbootclasspath/a: 在系统class加载后加载。通常用这个。
-Xbootclasspath/p: 在系统class加载前加载,容易和系统类冲突。文章来源地址https://www.toymoban.com/news/detail-629346.html

到了这里,关于maven 模块打包时包含依赖和打包可执行的jar的文章就介绍完了。如果您还想了解更多内容,请在右上角搜索TOY模板网以前的文章或继续浏览下面的相关文章,希望大家以后多多支持TOY模板网!

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处: 如若内容造成侵权/违法违规/事实不符,请点击违法举报进行投诉反馈,一经查实,立即删除!

领支付宝红包 赞助服务器费用

相关文章

  • maven根据操作系统的不同打包时引入不同的依赖(jar)

    在进行java开发时经常遇到一种情况,就是 windows 下和 linux 下需要引入的jar包是不一样的。 比如说我们需要使用java来操作 OpenGL 库,我们就需要通过 maven 引入 JOGL 的依赖, 然而在 window 下和在 linux 下需要引入 JOGL 的依赖是不一样的: 在 window 下,需要引入 JOGL 的 -win 版本的

    2024年02月09日
    浏览(33)
  • Maven打包可执行jar包方法大全(史上最全)

    目录 打包方法 方法一:使用maven-jar-plugin和maven-dependency-plugin 方法二:使用maven-assembly-plugin (推荐) 方法三:使用maven-shade-plugin 方法四:使用onejar-maven-plugin 方法五:使用spring-boot-maven-plugin 方法六:使用tomcat7-maven-plugin 参考   方法一:使用maven-jar-plugin和maven-dependency-plugin 首先

    2024年02月13日
    浏览(35)
  • 使用maven profile 实现一次打包多版本依赖的fat jar

    基于一种特殊情况: 需要开发通用代码,但底层依赖的jar有不同版本,使用一次maven 命令编译来同时生成多个fat jar。 测试代码结构: log4j-v1/log4j-v2 有一个同名类被maintest引用。 maintest pom.xml如下

    2024年02月12日
    浏览(36)
  • 解决IntelliJ IDEA执行maven打包,执行java -jar命令提示jar中没有主清单属性

    IDEA执行 mvn clean package -DskipTest=true 命令或者借助工具的 Maven菜单 进行打包操作,然后执行 java -jar app.jar 命令后,提示jar中没有主清单属性 这个错误通常是由于生成的JAR文件缺少一个主清单属性引起的。在使用 java -jar 命令运行JAR文件时,JVM需要查找JAR文件中包含 Main-Class 属

    2024年02月05日
    浏览(46)
  • Maven(五)如何只打包项目某个模块及其依赖模块?

    在 SpringCloud 微服务框架下,会存在多个模块。当我们需要对其中某一个服务打包的时候,需要将该服务依赖的模块一起打包更新,如果项目比较小的话我们可以直接将项目中的所有模块进行 clean install 即可。 但是当项目运行一段时间后,项目中的代码量会变得很多,每个模

    2024年01月23日
    浏览(42)
  • maven多模块----子模块相互依赖打包时报错找不到类的解决方案

    在被依赖的模块pom文件中加上如下配置: 注:如果你的配置文件就是如上配置,那么你需要在maven打包的时候,install一下,就可以依赖了

    2024年02月16日
    浏览(39)
  • 解决多模块内核心模块有接口打包成jar后被依赖并调用遇到的问题(springcloud集成ruoyi.quartz)

    项目准备开发个新功能,刚好很喜欢ruoyi写的任务调度,因此想到了集成ruoyi.quartz模块 ,遇到了很多问题: 首先因为 ruoyi.quartz模块依赖了ruoyi.common模块,因此第一步我需要把common模块一部分依赖项复制到了quartz模块内(复制的内容就是common文件夹内的,未用到的部门被我剔除

    2024年02月12日
    浏览(33)
  • 关于exe4j如何将java jar包打包成windows系统exe可执行文件,并包含JDK环境,超详细教程

    最近做了几个javaFX桌面软件,因为是maven项目,最后打包出来的是jar包,windows系统下要运行jar包,首先要安装JDK环境,然后敲命令:java -jar xxx.jar,才能运行程序,这样会显得很麻烦。而且前提是用户已经安装了JDK环境,所以实用性大大降低。这时就需要把jar包转化成exe可执

    2024年04月28日
    浏览(38)
  • Maven高级-分模块开发&依赖管理

    目标 理解并实现分模块开发 (1)按照功能拆分 我们现在的项目都是在一个模块中,比如前面的SSM整合开发。虽然这样做功能也都实现了,但是也存在了一些问题,我们拿银行的项目为例来聊聊这个事。 网络没有那么发达的时候,我们需要到银行柜台或者取款机进行业务操作

    2023年04月09日
    浏览(32)
  • springboot打包时依赖jar和项目jar分开打包;jar包瘦身

    最近感觉项目在部署时时 jar 包传输太慢了; 看了下 jar 包内容,除了项目代码,其余大部分都是依赖 jar ; 平时改动较多的只是项目代码,依赖 jar 改动比较少; 所以就在想能不能分开打包;这样只部署项目代码的改动就快多了; 我的 jdk 版本: 17 springboot 版本: 3.1.2 将依赖

    2024年02月06日
    浏览(35)

觉得文章有用就打赏一下文章作者

支付宝扫一扫打赏

博客赞助

微信扫一扫打赏

请作者喝杯咖啡吧~博客赞助

支付宝扫一扫领取红包,优惠每天领

二维码1

领取红包

二维码2

领红包