首页
学习
活动
专区
工具
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插件作为一个函数运行,实现灵活的构建和打包功能。了解更多:云函数产品介绍

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

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

相关·内容

  • SpringBoot这只怪物到底是如何跑起来的?

    不得不说 SpringBoot 太复杂了,我本来只想研究一下 SpringBoot 最简单的 HelloWorld 程序是如何从 main 方法一步一步跑起来的,但是这却是一个相当深的坑。你可以试着沿着调用栈代码一层一层的深入进去,如果你不打断点,你根本不知道接下来程序会往哪里流动。这个不同于我研究过去的 Go 语言、Python 语言框架,它们通常都非常直接了当,设计上清晰易懂,代码写起来简单,里面的实现同样也很简单。但是 SpringBoot 不是,它的外表轻巧简单,但是它的里面就像一只巨大的怪兽,这只怪兽有千百只脚把自己缠绕在一起,把爱研究源码的读者绕的晕头转向。但是这 Java 编程的世界 SpringBoot 就是老大哥,你却不得不服。即使你的心中有千万头草泥马在奔跑,但是它就是天下第一。如果你是一个学院派的程序员,看到这种现象你会怀疑人生,你不得不接受一个规则 —— 受市场最欢迎的未必就是设计的最好的,里面夹杂着太多其它的非理性因素。

    03

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

    “打包“这个词听起来比较土,比较正式的说法应该是”构建项目软件包“,具体说就是将项目中的各种文件,比如源代码、编译生成的字节码、配置文件、文档,按照规范的格式生成归档,最常见的当然就是JAR包和WAR包了,复杂点的例子是,它有自定义的格式,方便用户直接解压后就在命令行使用。作为一款”打包工具“,Maven自然有义务帮助用户创建各种各样的包,规范的JAR包和WAR包自然不再话下,略微复杂的自定义打包格式也必须支持,本文就介绍一些常用的打包案例以及相关的实现方式,除了前面提到的一些包以外,你还能看到如何生成源码包、Javadoc包、以及从命令行可直接运行的CLI包。

    02

    maven打一个可执行的jar包

    Alternatively use "${project.build.directory}/classes/lib" as OutputDirectory to integrate all jar-files into the main jar, but then you will need to add custom classloading code to load the jars. 如上,上面可以将依赖的jar包copy到 target下面的 lib/ 目录下。然后生成jar包。 注意一点是,你的jar包只是包含你自己的代码,并不会把lib/目录下的jar一起打进你的jar中去。 这个时候,你可以执行 java -jar theMainClass 来运行你的程序。 如果你想把所有的依赖jar都打包到你的jar里面去,成为单个jar。 那么你可以将 dependency-plugin 的output设置为 "${project.build.directory}/classes/lib" 这样就可以打成单个jar包了。 但是,这个时候,你执行 java -jar theMainClass 来运行的话,是运行不了的哦。会报ClassNotFound。 至于原因见下面: 你是否在使用java -jar参数运行打包好的jar应用程序的时候发现应用程序无法找到classpath下设置好的第三方类库的内容?无论怎么设置classpath参数都无济于事,总是会报ClassNotFound的错误?那么本篇帖子可以帮助你摆脱烦恼 :) 当 用java -jar yourJarExe.jar来运行一个经过打包的应用程序的时候,你会发现如何设置-classpath参数应用程序都找不到相应的第三方类,报 ClassNotFound错误。实际上这是由于当使用-jar参数运行的时候,java VM会屏蔽所有的外部classpath,而只以本身yourJarExe.jar的内部class作为类的寻找范围。 via: http://hi.baidu.com/daniel_tu/item/12e5434215c4052310ee1e8e 至于解决办法,上面的文章中有提到。个人觉得较好的是写个自定义的classLoader,来加载jar包内部的lib/目录下的class。 至此, 1).你通过maven来打一个可执行的jar包,要么选择不要把依赖jar包打到一起,而选择放在jar包外面的 lib/目录下。这样是可以的。 2).你也可以把依赖jar打到jar包内部,成为单个jar,是可以做到的,但通过java -jar方式执行会找不到类,需要自定义classLoader. 介绍第三种思路,允许打单独jar包,同时也可以通过 java -jar 来执行。 这种思路是将所有的依赖jar包解压开来变成class,打进我们的jar包里面去。POM如下:

    02

    SpringBoot 究竟是如何跑起来的?

    不得不说 SpringBoot 太复杂了,我本来只想研究一下 SpringBoot 最简单的 HelloWorld 程序是如何从 main 方法一步一步跑起来的,但是这却是一个相当深的坑。你可以试着沿着调用栈代码一层一层的深入进去,如果你不打断点,你根本不知道接下来程序会往哪里流动。这个不同于我研究过去的 Go 语言、Python 语言框架,它们通常都非常直接了当,设计上清晰易懂,代码写起来简单,里面的实现同样也很简单。但是 SpringBoot 不是,它的外表轻巧简单,但是它的里面就像一只巨大的怪兽,这只怪兽有千百只脚把自己缠绕在一起,把爱研究源码的读者绕的晕头转向。但是这 Java 编程的世界 SpringBoot 就是老大哥,你却不得不服。即使你的心中有千万头草泥马在奔跑,但是它就是天下第一。如果你是一个学院派的程序员,看到这种现象你会怀疑人生,你不得不接受一个规则 —— 受市场最欢迎的未必就是设计的最好的,里面夹杂着太多其它的非理性因素。

    02
    领券