首页
学习
活动
专区
工具
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包

    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

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

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

    02
    领券