首页
学习
活动
专区
工具
TVP
发布
精选内容/技术社群/优惠产品,尽在小程序
立即前往

Maven - 打包之争:Jar vs. Shade vs. Assembly

下面是它们的详细比较: Jar 打包方式: 描述: 这是最常见的打包方式,它创建一个标准的Java JAR文件。 优点: 简单直接,适用于大多数简单项目。...缺点: 不能包含项目的依赖,如果项目有外部依赖,用户必须手动将它们添加到类路径中。 Shade 打包方式: 描述: Maven Shade插件允许创建一个可执行的JAR文件,其中包含所有依赖。...Shade 打包方式_maven-shade-plugin Overview 插件:使用maven-shade-plugin插件 maven-shade-plugin提供了两大基本功能: 将依赖的jar...包打包到当前jar包(常规打包是不会将所依赖jar包打进来的); 对依赖的jar包进行重命名(用于类的隔离); 使用 maven-shade-plugin 只存在一个goal shade:shade,需要将其绑定到...”和“org.codehaus.plexus.util.xml.pull”不会被重命名到目的包中; 修改包的后缀名 默认会生成一个Jar包和一个以 “-shaded”为结尾的uber-jar包,可以通过配置来指定

1.5K10

Java基准性能测试--JMH使用介绍

总结: JMeter适合一些相对耗时的集成功能测试,如API接口的测试。JMH适合于类或者方法的单元测试。...JMH基本用法 创建JMH项目 官方推荐为JMH基准测试创建单独的项目,最简单的创建JMH项目的方法就是基于maven项目原型的方式创建(如果是在windows环境下,需要对org.open.jdk.jmh...pom文件中主要是添加了两个jmh 的依赖和设置了maven-shade-plugin的编译方式(负责把项目的所有依赖jar包打入到目标jar包中,与springboot的实现方式类似)。...JMH与Springboot 在对Springboot项目做JMH基准测试时可能会因为maven-shade-plugin插件的问题打包报错,需要在JMH的maven-shade-plugin的插件配置中添加...、字段,@State注解是用来配置这些变量的生命周期,@State注解可以放在类上,然后在基准测试方法中可以通过参数的方式把该类对象作为参数使用。

90910
  • 您找到你想要的搜索结果了吗?
    是的
    没有找到

    maven 插件之 maven-shade-plugin,解决同包同名 class 共存问题的神器

    这段话简明扼要的概述了 maven-shade-plugin 的功能 能够将项目连同其依赖,一并打包到一个 uber-jar 中 uber-jar 就是一个超级 jar,不仅包含我们的工程代码,还包括依赖的...打包成 jar 后也包含 META-INF/MANIFEST.MF,两者重复了,只会将其中一个复制进 uber jar;默认情况下,是将我们项目的 jar 中的 META-INF/MANIFEST.MF...include 配置中的类 这就会导致问题,我们来看个案例,我们引入 logback 依赖,但代码中未用到它,而我们又想将其下的 class 复制进 uber-jar,另外我们还想将 hutool...,就不演示了,你们自行去测试 同包同名 class 共存 回到我们的主题,如果我们项目依赖的 jar 中出现了同名的 class (包名和类名均相同),根据 双亲委派模型,只会加载其中某一个 class...甲方扔给两个存在包名与类名均相同的Jar包,要在工程中同时使用怎么办?

    17210

    浅谈 java 中构建可执行 jar 包的几种方式

    会直接报错:无法找到主类或者找不到 xxx 依赖包/类,这是由于你没有定义 MANIFEST.MF 资源描述文件所致, 或者你直接把依赖的 jar 包打进了你最终的 jar,而这种嵌套的依赖...下面我们看看如何在 eclipse 中构建一个可执行的 jar 包。...默认Maven生成的JAR包只包含了编译生成的.class文件和项目资源文件,而要得到一个可以直接在命令行通过 java命令运行的JAR文件,还要满足两个条件: JAR包中的/META-INF...关于项目的依赖,它很聪明地将依赖 JAR文件全部解压后,再将得到的.class文件连同当前项目的.class文件一起合并到最终的CLI包中,这样,在执行CLI JAR文件的时候,所有需要的类就都在Classpath...mainClass:当用户使用 lib 命令执行 JAR 文件时,使用该元素定义将要执行的类名。

    3.9K50

    maven:又遇到maven jar包冲突了?比较常见的处理方法及避坑

    简介 ---- 在使用Maven时,有时会遇到jar包冲突的问题,也就是多个依赖中包含了同名的jar包,在编译或运行时会导致异常。...通俗的讲,就是控制 Jar 包在哪些范围被加载和使用。这个范围包括,编译、测试、运行,并且还可以加上是否被打入包中。...3、利用maven-shade-plugin的重定位类(Relocating Classes)功能,把依赖的第三方jar包重命名后打包到项目的jar包 比如Flink的大多数依赖项,如guava、netty...这种解决方案比较实用,但是很难解决第三方依赖之间的冲突。 4、类隔离策略 为了解决运行时类冲突,很多技术都实现了类隔离策略,比如大数据框架Flink、蚂蚁金服的SOFAArk、tomcat等。...比如tomcat为了实现运行时隔离采用的类加载策略: 小结 ---- 如果又遇到maven jar包冲突了,可以使用上面比较常见的这几种处理方法来解决,每种解决方案都有其适用场景。

    1.5K20

    MAVEN之pom文件的快速应用

    MAVEN依赖关系中Scope的作用 Dependency Scope 在POM4中 中还引入了,它主要管理依赖的部署。...这种类型的依赖项将在运行和test的类路径下可以访问。 test:表示该依赖项只对测试时有用,包括测试代码的编译和运行,对于正常的项目运行是没有影响的。...但打出来的包里面不包含lib目录和fbcds.jar这个引用的包,即打出来的包不是可执行的jar。所以个人开发的话可以使用这种方式,如果团队开发请使用方法二。...方法二:将待引入的jar包安装到本地repository中 1、先把待引入的jar包放在一个目录下,需要改一下包名,如fbcds.jar修改成fbcds-1.0.jar,如F:\lib目录,在命令行...MAVEN如何打可执行的JAR包 前提条件:已成功将待引入的jar包安装到本地repository中 方法一、使用maven-shade-plugin插件打可执行的jar包 插件查找链接:http

    1.2K20

    Spring Boot应用的打包和部署

    一、创建基于Spring Boot框架的可执行Jar包 Spring Boot开发的应用可以打包为单独的JAR包,然后通过java -jar .jar命令运行。...Note:Uber JAR是将应用程序打包到单独的jar包中,该jar包包含了应用程序依赖的所有库和二进制包。...运行Jar启动Java web应用 分析 如上所示,打包成可执行的jar包这种方法相当直观,背后的工作由spring-boot-maven-plugin插件实现:先通过maven-shade-plugin...生成一个包含依赖的jar,再通过spring-boot-maven-plugin插件把spring boot loader相关的类,还有MANIFEST.MF打包到jar里。...总结下Spring Boot应用的启动流程:(1)spring boot应用打包之后,生成一个fat jar,里面包含了应用依赖的jar包,还有Spring boot loader相关的类;(2)Fat

    65130

    【C++】类的声明 与 类的实现 分开 ① ( 类的声明 与 类的实现 常用用法 | Visual Studio 2019 中创建类的头文件和源文件 | 确保头文件包含一次 )

    一、类的声明 与 类的实现 分开 1、类的声明 与 类的实现 常用用法 在之前的博客中 , 定义的 class 类 , 定义类时 同时 也完成了实现 ; 但是在 C++ 语言实际开发中 , 大部分的情况下...; 上述 .h 后缀 的头文件 和 .cpp 后缀 的源码文件 , 可以手动创建添加 , 也可以使用 IDE 自带的创建类功能添加 , 这里推荐后者 , 下面的章节讲解在 Visual Studio...2019 中创建类 的方法 ; 2、Visual Studio 2019 中创建类的头文件和源文件 右键点击 " 解决方案资源管理器 " 中的解决方案名称 , 在弹出的菜单中选择 " 添加 / 类 "...实现类 ; #include "Student.h" 3、Student.h 类头文件解析 #pragma once 代码的作用是 确保 该头文件 在 整个程序中 , 只能被 include 包含一次...__Student_H_ 在 C++ 中可以都使用 ; 生成的默认类只有一个类名 , 没有其它内容 ; class Student { }; 4、确保头文件包含一次 确保头文件包含一次的方法 : C++

    46030

    Maven打包之maven-shade-plugin

    打包是一个比较头疼的事情,默认maven打包的结果只包含项目本身的代码,如果要执行代码,还得带上依赖。maven-shade-plugin插件就能够帮我们把项目依赖的包也打进最终文件。...shade打包过程 shade插件绑定在maven的package阶段,他会将项目依赖的jar包解压并融合到项目自身编译文件中。...--只包含该项目代码中用到的jar,在父项目中引入了,但在当前模块中没有用到就会被删掉--> true...--重新定位类位置,就好像类是自己写的一样,修改别人jar包的package--> 的是像spring包比较分散,但每个包中的META-INF中有很相同名称的文件,需要通过特定的ResourceTransformer将他们融合到一个文件中。

    17.1K30

    Maven - 统一构建规范:Maven 插件管理最佳实践

    这些插件可以一起使用,以构建具有各种功能和依赖项的应用程序。 假设我们要创建一个名为my-project的 JAR 文件,其中包含项目中的源代码、依赖项和一些资源文件。...通过这个案例,我们已经成功地使用 maven-jar-plugin 创建了一个 JAR 文件,其中包含项目的源代码和资源文件。...通过添加默认实现入口和默认规范入口,可以确保应用程序能够正确地运行并提供一些额外的规范信息。这通常用于创建可执行 JAR 文件,其中包含应用程序的主类。...如新建一个 Maven 工程并在依赖中导入 Jackson 依赖库并进行打包编译,可以看到下图编译后的 JAR 文件中只有工程中新建的 MyTest.class 文件,项目中所导入的依赖并没有被一起打包...,可以看到此时 JAR 文件中除了自定义创建的 MyTest.clss 文件外同时包含了依赖的第三方库。

    1.6K30

    版本不兼容Jar包冲突该如何是好?

    版本和0.2版本,而且最不巧的是这两个版本还存在冲突,有些老的功能只在0.1低版本中存在,有些新功能只在0.2高版本中存在,真是“老婆和妈同时掉进水里,先救谁都不行”。...于是,我们就去搜索相关的文章,果不其然,maven-shade-plugin正是那优雅的挠痒姿势,这个Maven插件的原理正是将类的包路径进行重新映射,达到隔离不兼容Jar包的目的。...三、maven-shade-plugin解决依赖冲突 最后如何来配置和使用maven-shade-plugin将Guava映射成我们自己定制的Jar包,实现与中间件Guava的隔离。...整个的过程还是比较清晰明了的,主要是创建一个Maven工程,引入依赖,配置我们要发布的仓库地址,引入编译打包插件和maven-shade-plugin插件,配置映射规则(标签之间部分),然后编译打包发布到...如果遇到类似需要支持版本不兼容Jar包共存的场景,可以考虑使用maven-shade-plugin插件,这种方法比较轻量级,可用于项目中存在个别不兼容Jar包冲突的场景,简单有效,成本也很低。

    2.6K30

    聊聊springboot项目如何利用jmh来进行基准测试

    它提供了一种标准、可靠且可重复的方式来衡量Java代码的性能,包括方法调用、对象创建以及其他类型的 JVM 级别的操作。...3、JMH常用注解注: 因为我们主要利用JMH提供的注解来进行基准测试,因此我们有必要了解一下JMH一些常用注解@State: 表明类的所有属性的作用域。只能用于类上。...: 每个线程组共享一个实例;@BenchmarkMode: 用于指定基准测试的执行模式,如吞吐量、平均执行时间。...例如@Threads 指定线程数为 2 ,那么每次测量都会创建两个线程来执行基准测试方法@OutputTimeUnit: 可以指定输出的时间单位,可用于类或者方法注解@Param: 指定某项参数的多种情况...springboot-jmh.jar SpringBootJmhTest -rf json -rff D:/jmhResult.json注: SpringBootJmhTest 为我们要进行JMH测试的类以上几种执行方式如何取舍如果是小测试

    18810

    maven 基础 maven-shade-pluginMaven Scopepom.xml 样例

    maven-shade-plugin maven 工程超级打包,包括工程依赖及对依赖包的重命名。...如servlet.jar。 * runtime,只在运行时使用,如JDBC驱动,适用运行和测试阶段。 * test,只在测试时使用,用于编译和运行测试代码。不会随项目发布。...* system,类似provided,需要显式提供包含依赖的jar,Maven不会在Repository中查找它。 依赖范围控制哪些依赖在哪些classpath 中可用,哪些依赖包含在一个应用中。...例如, 如果你开发了一个web 应用,你可能在编译 classpath 中需要可用的Servlet API 来编译一个servlet,但是你不会想要在打包好的WAR 中包含这个Servlet API;这个...system (系统范围) system范围依赖与provided 类似,但是你必须显式的提供一个对于本地系统中JAR 文件的路径。这么做是为了允许基于本地对象编译,而这些对象是系统类库的一部分。

    1.1K40

    2024年最新Flink教程,从基础到就业,大家一起学习--Flink集群部署

    当你在pom.xml文件中为某个依赖项(dependency)添加provided时,这表示该依赖项在编译和测试阶段是必需的,但在运行时将不会由Maven的打包插件(如maven-jar-plugin...)包含在最终的jar包中。...总的来说,将依赖项设置为provided是为了确保最终打包的应用程序jar不包含那些在运行时环境中已经存在的库,从而减少jar包的大小和潜在的类路径冲突。...、依赖库以及可能经过了一些构建步骤(如Maven的maven-shade-plugin插件处理)的jar包。...如果你在Maven或Gradle配置中使用了如maven-shade-plugin或shadowJar等插件,这个jar包可能经过了类重定位(Relocation)、资源合并等处理,以确保jar包中的类路径

    28800

    聊聊如何避免多个jar通过maven打包成一个jar,多个同名配置文件发生覆盖问题

    前言 不知道大家在开发的过程中,有没有遇到这种场景,外部的项目想访问内部nexus私仓的jar,因为私仓不对外开放,导致外部的项目没法下载到私仓的jar,导致项目因缺少jar而无法运行。...如果不进行处理,直接打包,就会出现同名配置文件覆盖的情况 本文就是要来聊聊当多个jar合并成一个jar,如何解决多个同名配置文件覆盖的情况 解决思路 通过maven-shade-plugin这个插件,利用插件的...org.apache.maven.plugins.shade.resource.AppendingTransformer来处理处理多个jar包中存在重名的配置文件的合并。...-- 防止同名配置文件,在打包时被覆盖,用来处理多个jar包中存在重名的配置文件的合并 参考dubbo:https://github.com/apache/dubbo/blob/master...文件中 也就是创建该文件夹和文件 jos.putNextEntry(new JarEntry(jarEntry)); jos.write

    1.8K70
    领券