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

Maven shade仅将依赖项中的某些类(第2个,共3个)着色到最终jar中

Maven shade是一个用于构建Java项目的插件,它可以将项目的依赖项打包到最终的可执行jar文件中。通过配置Maven shade插件,我们可以选择性地将依赖项中的某些类着色到最终的jar文件中。

着色是指将特定的类或资源文件从依赖项中提取出来,并将其合并到最终的jar文件中。这样做的好处是可以减少最终jar文件的大小,同时也可以避免因为依赖项冲突而导致的运行时错误。

Maven shade插件的配置通常在项目的pom.xml文件中进行。以下是一个示例配置:

代码语言:txt
复制
<build>
  <plugins>
    <plugin>
      <groupId>org.apache.maven.plugins</groupId>
      <artifactId>maven-shade-plugin</artifactId>
      <version>3.2.4</version>
      <executions>
        <execution>
          <phase>package</phase>
          <goals>
            <goal>shade</goal>
          </goals>
          <configuration>
            <filters>
              <filter>
                <artifact>com.example:example-library</artifact>
                <includes>
                  <include>com/example/library/SomeClass.class</include>
                  <include>com/example/library/AnotherClass.class</include>
                  <include>com/example/library/ThirdClass.class</include>
                </includes>
              </filter>
            </filters>
          </configuration>
        </execution>
      </executions>
    </plugin>
  </plugins>
</build>

在上述配置中,我们指定了要着色的依赖项为com.example:example-library,并且只将其中的SomeClassAnotherClassThirdClass这三个类着色到最终的jar文件中。

Maven shade插件的应用场景包括但不限于以下几个方面:

  1. 优化jar文件大小:通过选择性地将依赖项中的某些类着色到最终的jar文件中,可以减少jar文件的大小,提高应用程序的加载速度和运行效率。
  2. 解决依赖项冲突:当项目的依赖项中存在冲突时,可以使用Maven shade插件将特定的类从冲突的依赖项中提取出来,避免冲突导致的运行时错误。
  3. 打包可执行jar文件:Maven shade插件可以将项目的所有依赖项打包到最终的可执行jar文件中,方便部署和运行。

腾讯云提供了一系列与云计算相关的产品,其中包括与Maven shade插件类似的构建工具和服务。具体推荐的产品和产品介绍链接如下:

  1. 云开发(CloudBase):腾讯云提供的一站式云端研发平台,支持多种开发语言和框架,包括Java。通过云开发,您可以方便地进行项目构建、部署和运行。了解更多:云开发产品介绍
  2. 云原生应用平台(TKE):腾讯云提供的容器服务平台,支持将应用程序打包成容器镜像,并进行弹性部署和管理。通过TKE,您可以方便地构建和管理包含Maven shade插件的Java应用程序。了解更多:云原生应用平台产品介绍
  3. 云函数(SCF):腾讯云提供的无服务器计算服务,支持按需运行代码片段。通过云函数,您可以将Maven shade插件作为一个函数运行,实现灵活的构建和打包功能。了解更多:云函数产品介绍

通过使用腾讯云的相关产品,您可以更加便捷地进行云计算领域的开发和部署工作,提高项目的效率和稳定性。

页面内容是否对你有帮助?
有帮助
没帮助

相关·内容

Maven依赖Jar冲突排查及解决

使用包名替换(Shade) 冲突检测插件 IDEA安装Maven Helper插件。...从图中可以看出有哪些jar存在冲突,存在冲突情况下最终采用了哪个依赖版本。 标红就是冲突版本,白色是当前解析版本。...定位方式 在IDEA(快捷键Ctrl+N)查找异常栈中提示缺失在哪些版本jar包中有。...shade 也有maven插件,通过更改jar字节码来避免jai包冲突,jar包冲突本质是全限定名(包名+名)冲突了,通过全限定名不能定位到你想用那个maven-shade插件可以更改...但是有些包,版本变化大没法去做向下兼容,高版本删了低版本某些或者某些方法,那么这个时候就不能选择高版本,但也不能选择低版本。这种只能使用Shade处理。

1.7K40

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

缺点: 不能包含项目的依赖,如果项目有外部依赖,用户必须手动将它们添加到路径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包,可以通过配置来指定

88710

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

会直接报错:无法找到主或者找不到 xxx 依赖包/,这是由于你没有定义 MANIFEST.MF 资源描述文件所致, 或者你直接把依赖 jar 包打进了你最终 jar,而这种嵌套依赖...关于项目的依赖,它很聪明地依赖 JAR文件全部解压后,再将得到.class文件连同当前项目的.class文件一起合并到最终CLI包,这样,在执行CLI JAR文件时候,所有需要就都在Classpath...当您使用这 3 个元素配置好了 MANIFEST.MF 文件之后,下一步是所有的依赖复制 lib 文件夹。...有一个 copy-dependencies,目标是依赖复制您所选择目录。...本例,我依赖复制  build 目录下 lib 目录(project-home/target/lib)。

3.8K50

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

Maven-javadoc-plugin:用于生成项目 Javadoc 文档。 Maven-install-plugin:用于安装项目依赖库,可以依赖库安装到本地仓库。...它可以项目的源代码、依赖和配置文件打包成一个 JAR 文件,以便在应用程序中使用。...这些插件可以一起使用,以构建具有各种功能和依赖应用程序。 假设我们要创建一个名为my-project JAR 文件,其中包含项目中源代码、依赖和一些资源文件。.../examples/index.html 在普通 Maven 工程打包时默认会编译工程中新建 java 文件并存储其 .class 文件,对于 POM 文件引用第三方依赖并不会一同打包。...另一个即实现包重命名功能,我们都知道 Maven 并不允许在一工程同时引入单个依赖不同版本,而通过 Shade 插件即可实现二次包装从而绕开该限制。

1.3K30

Flink加载器

后者意味着该库不能被添加到 Flink /lib 文件夹,而必须是应用程序 fat-jar/uber-jar 一部分 卸载用户代码动态加载 所有涉及动态用户代码加载(会话)场景都依赖于再次卸载...为了确保这些只加载一次,您应该驱动程序 jar 添加到 Flink lib/ 文件夹,或者通过 classloader.parent-first-patterns-additional 驱动程序添加到父级优先加载列表...使用 maven-shade-plugin 解决与 Flink 依赖冲突 从应用程序开发人员角度解决依赖冲突一种方法是通过隐藏它们来避免暴露依赖关系。...Apache Maven 提供了 maven-shade-plugin,它允许在编译后更改包(因此您编写代码不受阴影影响)。...例如,如果您用户代码 jar 中有来自 aws sdk com.amazonaws 包,则 shade 插件会将它们重新定位 org.myorg.shaded.com.amazonaws 包

2.3K20

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

于是,我们就去搜索相关文章,果不其然,maven-shade-plugin正是那优雅挠痒姿势,这个Maven插件原理正是包路径进行重新映射,达到隔离不兼容Jar目的。...三、maven-shade-plugin解决依赖冲突 最后如何来配置和使用maven-shade-pluginGuava映射成我们自己定制Jar包,实现与中间件Guava隔离。...整个过程还是比较清晰明了,主要是创建一个Maven工程,引入依赖,配置我们要发布仓库地址,引入编译打包插件和maven-shade-plugin插件,配置映射规则(标签之间部分),然后编译打包发布...从问题出来,我们一步一步探寻问题解决方案,最终maven-shade-plugin插件方案虽然看似与手动自行维护代码本质一致,看似回到了原点,但其实最终方案优雅性远比最开始高得多,正如人生道路那样...如果遇到类似需要支持版本不兼容Jar包共存场景,可以考虑使用maven-shade-plugin插件,这种方法比较轻量级,可用于项目中存在个别不兼容Jar包冲突场景,简单有效,成本也很低。

2.3K30

Maven打包三种方法和常用命令大全

pom.xml配置: 3 方法三:使用maven-shade-plugin插件打包在pom.xml配置: maven常用打包命令 1、mvn compile 编译,Java 源程序编译成 class...5、mvn install 项目生成 jar 包放在仓库,以便别的模块调用 6、mvn clean install -Dmaven.test.skip=true 抛弃测试用例打包 Maven可以使用...要想jar包能直接通过java -jar xxx.jar运行,需要满足: 1、在jarMETA-INF/MANIFEST.MF中指定Main-Class,这样才能确定程序入口在哪里; 2、要能加载到依赖包...-2.4.jar Main-Class: com.xxg.Main 只是生成MANIFEST.MF文件还不够,maven-dependency-plugin插件用于依赖包拷贝<outputDirectory...如果项目中用到了Spring Framework,依赖打到一个jar,运行时会出现读取XML schema文件出错。

4.9K20

改变maven打包路径_Maven打包技巧「建议收藏」

它们有着广泛用途,尤其是源码包,当你使用一个第三方依赖时候,有时候会希望在IDE中直接进入该依赖源码查看其实现细节,如果该依赖源码包发布到了Maven仓库,那么像Eclipse就能通过m2eclipse...Maven有好几个插件能帮助用户完成上述任务,不过用起来最方便还是maven-shade-plugin,它可以让用户配置Main-Class值,然后在打包时候值填入/META-INF/MANIFEST.MF...关于项目的依赖,它很聪明地依赖JAR文件全部解压后,再将得到.class文件连同当前项目的.class文件一起合并到最终CLI包,这样,在执行CLI JAR文件时候,所有需要就都在Classpath...,每个具体打包路径用户也能自由控制。...(假设artifactId为hello-world,version为1.0) dependencySets用来定义选择依赖并定义最终打包什么目录,这里我们声明一个depenencySet默认包含所有所有依赖

2.3K20

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

响应时间和分布分析: JMH不仅提供平均执行时间数据,还可以帮助分析请求完成时间分布情况,比如你可以了解多少百分比请求能在多长时间内完成。...main函数直接指定我们要进行基准测试main函数,比如com.github.lybgeek.jmh.SpringBootJmhTest其次因为我们springboot运行会依赖一些自动装配,因此我们也需要将相关配置比如... shade-my-jar...否则会和springboot默认插件id冲突...Mode: 模式thrpt:吞吐量 avgt:每次请求平均耗时 sample:请求样本数量,这次压测一发了多少个请求ss:除去冷启动,一执行了多少轮Cnt: 基准测试执行迭代次数或者样本数量Score...根据你选择@BenchmarkMode不同,报告单位也会有所变化5、jmh测试结果可视化我们可以生成jmhjson结果上传到如下网站,进行可视化分析JMH Visual Chart:hhttp

13810

Apache Flink利用Maven对Scala与Java进行混编

Flink作业在提交到生产环境集群时候不要把Flink相关源码等打入jar,因为这样可能会出现当生产版本与开发版本不同时候就会出现冲突。 ?...所以,对于maven可能出现冲突包需要过滤掉,而其他三方包或二方包才打入jar。...Scala与Java混合编写肯定是支持,在开发时候首先我引入是Scala相关依赖,后来由于需要Java同学帮忙来做工程某些实现,需要在工程编写Java相关代码。...在本地开发Java代码,Scala引用Java相关内容均没有任何问题,开发完成后需要把代码打为jar包提交到Flink集群。 NoClassDefFoundError ?...这样某些模块就可以交由Java语言同学进行开发了...所以,最终最需要做好框架就可以了,这个才是最核心目的!

2.2K30

关于Maven使用,这些你都了解了么?

scope : 依赖jar作用范围,可选(compile,runtime,test,system,provided) compile : 这是默认范围。所有路径中都提供了编译依赖。...此外,这些依赖传播到依赖项目 runtime : 这很像compile,但表示您希望JDK或容器在运行时提供它。它仅在编译和测试路径可用,并且不可传递。...test : 此范围表示正常使用应用程序不需要依赖,并且适用于测试编译和执行阶段。它不是传递性。 provided :这很像compile,但表示您希望JDK或容器在运行时提供它。...依赖传递特性,当出现多个jar依赖相同不同版本jar时,遵循两个原则来引用: 最短路径原则:如A->B->C-D1 , A->B1->D2 , 那么最终项目A依赖D版本是D2。...最先定义原则: 如A->B->D1 , A->C->D2 , 那么最终项目A雨来D版本是D1. dependencyManagement 节点,声明依赖 dependencyManagement用来管理声明依赖

28560

SpringBoot 究竟是如何跑起来?

再抱怨一下,这个简单 HelloWorld 虽然 pom 里只配置了一个 maven 依赖,但是传递下去,它一依赖了 36 个 jar 包,其中以 spring 开头 jar 包有 15 个。...探索 ClassLoader SpringBoot 还有一个特色地方在于打包时它使用了 FatJar 技术所有的依赖 jar 包一起放进了最终 jar BOOT-INF/lib 目录,当前项目的... 这不同于我们平时经常使用 maven shade 插件,所有的依赖 jar...─ boot 这种打包方式优势在于最终 jar 包结构很清晰,所有的依赖一目了然。...如果使用 maven shade 会将所有的 class 文件混乱堆积在一起,是无法看清其中依赖。而最终生成 jar 包在体积上两也者几乎是相等

82220

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

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

88120

Maven系列10篇:设计你自己maven插件【高手必备】

,这个Log默认可以向控制台输出日志信息,maven自带插件都继承这个,一般情况下我们开发插件目标可以直接继承这个,然后实现execute方法就可以了。...5、在目标execute方法实现具体逻辑 6、安装插件本地仓库:插件pom.xml所在目录执行下面命令 mvn clean install 或者可以部署私服仓库,部署方式和其他构件方式一样...integer.parseInt()或valueOf()方法转换为整数值,这意味着字符串必须是有效十进制整数值,由数字09组成,前面有一个可选-表示负值。...手动实现打包之后自动运行插件 实现思路 1、目标构件打包为可以执行jartarget目录 maven中将构件打包为可以执行jar插件,maven已经帮我们提供了,如下: ...官方提供一个打包插件,可以构件打包为可以直接运行jar包。

3.5K30
领券