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

如何在maven-shade-plugin创建的Jar中包含测试类?

在 Maven-shade-plugin 创建的 Jar 中包含测试类,可以通过在 Maven 项目的 pom.xml 文件中添加 shadeTest 插件来实现。shadeTest 插件可以将在 src/test/java 目录下的测试类打包到生成的 JAR 文件中。

具体实现步骤如下:

  1. pom.xml 文件中添加 shadeTest 插件,如下所示:
代码语言:xml
复制

<build>

代码语言:txt
复制
   <plugins>
代码语言:txt
复制
       <plugin>
代码语言:txt
复制
           <groupId>org.apache.maven.plugins</groupId>
代码语言:txt
复制
           <artifactId>maven-shade-plugin</artifactId>
代码语言:txt
复制
           <version>3.2.1</version>
代码语言:txt
复制
           <configuration>
代码语言:txt
复制
               <createDependencyReducedPom>false</createDependencyReducedPom>
代码语言:txt
复制
               <filters>
代码语言:txt
复制
                   <filter>
代码语言:txt
复制
                       <artifact>*:*</artifact>
代码语言:txt
复制
                       <excludes>
代码语言:txt
复制
                           <exclude>META-INF/*.SF</exclude>
代码语言:txt
复制
                           <exclude>META-INF/*.DSA</exclude>
代码语言:txt
复制
                           <exclude>META-INF/*.RSA</exclude>
代码语言:txt
复制
                       </excludes>
代码语言:txt
复制
                   </filter>
代码语言:txt
复制
               </filters>
代码语言:txt
复制
           </configuration>
代码语言:txt
复制
           <executions>
代码语言:txt
复制
               <execution>
代码语言:txt
复制
                   <phase>package</phase>
代码语言:txt
复制
                   <goals>
代码语言:txt
复制
                       <goal>shade</goal>
代码语言:txt
复制
                   </goals>
代码语言:txt
复制
                   <configuration>
代码语言:txt
复制
                       <transformers>
代码语言:txt
复制
                           <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
代码语言:txt
复制
                               <manifestEntries>
代码语言:txt
复制
                                   <Main-Class>com.example.TestClass</Main-Class>
代码语言:txt
复制
                                   <Class-Path>.</Class-Path>
代码语言:txt
复制
                               </manifestEntries>
代码语言:txt
复制
                           </transformer>
代码语言:txt
复制
                       </transformers>
代码语言:txt
复制
                   </configuration>
代码语言:txt
复制
               </execution>
代码语言:txt
复制
           </executions>
代码语言:txt
复制
       </plugin>
代码语言:txt
复制
   </plugins>

</build>

代码语言:txt
复制

在上述代码中,<plugin> 标签指定使用 maven-shade-plugin 来创建包含测试类的 JAR 文件,<configuration> 标签指定生成 JAR 文件的名称、版本等信息,<transformers> 标签指定将测试类打包到 JAR 文件中的转换规则。

  1. 在测试类中,使用 java -jar 命令运行 JAR 文件,如下所示:
代码语言:java
复制

public class TestClass {

代码语言:txt
复制
   public static void main(String[] args) {
代码语言:txt
复制
       System.out.println("Hello, world!");
代码语言:txt
复制
   }

}

代码语言:txt
复制

在上述代码中,TestClass 定义了一个 main 方法,可以在运行时输出 "Hello, world!"。使用 java -jar 命令运行 JAR 文件时,会自动调用 main 方法。

如果需要在其他环境下运行测试类,可以将 main 方法的访问修饰符改为 public,并且手动创建 java 命令的参数列表,然后运行命令。例如:

代码语言:java
复制

public class TestClass {

代码语言:txt
复制
   public static void main(String[] args) {
代码语言:txt
复制
       System.out.println("Hello, world!");
代码语言:txt
复制
   }

}

代码语言:txt
复制

在上述代码中,将 main 方法的访问修饰符改为 public,以便在运行时可以被找到。然后,在命令行中输入以下命令来运行测试类:

代码语言:txt
复制

java -cp target/my-test-jar.jar com.example.TestClass

代码语言:txt
复制

在上述命令中,-cp 参数指定了运行时所需的类路径,com.example.TestClass 指定了要运行的测试类。

以上就是在 Maven-shade-plugin 的 JAR 中包含测试类的方法。

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

相关·内容

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.2K10

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插件问题打包报错,需要在JMHmaven-shade-plugin插件配置添加...、字段,@State注解是用来配置这些变量生命周期,@State注解可以放在上,然后在基准测试方法可以通过参数方式把该类对象作为参数使用。

87410
  • 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包,要在工程同时使用怎么办?

    10510

    浅谈 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.2K20

    MAVEN之pom文件快速应用

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

    64930

    【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++

    40030

    Maven打包之maven-shade-plugin

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

    16.7K30

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

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

    1.4K30

    版本不兼容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.4K30

    聊聊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测试以上几种执行方式如何取舍如果是小测试

    17910

    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

    聊聊如何避免多个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

    在Java里面如何解决进退两难jar包冲突问题?

    那么如何比较优雅解决这种进退两难困境问题呢?maven-shade-plugin出现,就可以解决这个问题。...*导入除外,现实不建议用这种方式),而修改包名,只需要把每一个依赖该类文件头部导入路径调换成新即可,文件里面的无需修改。...通过maven-shade-plugin插件功能,就可以很容易做到这件事。...es依赖在编译后class文件层进行绑定,将其两者变成一个整体依赖jar,并且这个组件也会自动修改es里面所有导入guava旧路径为改动后新路径,看如下从反编译后jar,拷贝出来文件信息...里面的es就只对这个版本guava进行了绑定依赖,这个时候在spark项目中,引入这个esuber-shade-jar,就不会发生冲突,通过使用不同包名完美解决了冲突问题,这两个都可以被同一个

    3.1K40
    领券