失眠网,内容丰富有趣,生活中的好帮手!
失眠网 > 使用 maven 打包 src/test/java下的文件 并用 java jar 跑打包出来的jar

使用 maven 打包 src/test/java下的文件 并用 java jar 跑打包出来的jar

时间:2022-09-17 02:22:41

相关推荐

使用 maven 打包 src/test/java下的文件 并用 java jar 跑打包出来的jar

目标:用java jar命令 运行多个Junit Test Case

首先将 TestCase放到一个 Suite中然后使用 JUnitCore 运行 Suite打出一个 jar包,然后再命令行中运行

如果要看结果,可以直接看最后一步:6. Final result 总结

前面几步,都是 怎么踩坑,填坑的过程

1. 实现

将 TestCase类,都包含到一个Suite中

@RunWith(Suite.class)@SuiteClasses({ TestCase1.class, TestCase2.class })public class TestSuite {}

带main函数的 java类

public class TestRunner {public static void main(String[] args) {Result result = JUnitCore.runClasses(TestSuite.class);boolean isAllPassed = result.wasSuccessful();if (!isAllPassed) {List<Failure> failures = result.getFailures();for (Failure item : failures) {System.out.println(item.toString());}}}}

2. 用命令行运行

由于 test的实现,是写在 maven 工程中的 src/test/java 目录下的,使用maven打包的时候,里面的类的class文件,不会被打包到 jar中..

note From stack-overflow:

if youre following maven conventions then your test classes are under src/test/java. maven never packages the contents of the test sources subdirectory into the artifact

maven工程的工程结构如下:

所以用了另一种打包方式: 用 Eclipse的export,打了一个jar包.

但是,这样出来的jar包,是没有包含maven的依赖包的,所以在运行的时候,需要将需要的jar包含进来

执行的命令如下:

java -cp junit-4.8.1.jar;hyz_test.jar com.opengroup.hongshi.gwhyz.test.lokia.TestRunner

3. 使用 maven-assembly-plugin 进行打包

后来发现使用 maven-assembly-plugin 进行打包,然后是可以通过配置将 src/test/java 中的文件打包进去的

先 clean - 这一步主要是编译,生成 .class 文件

maven 打包的时候,不要使用clean, 直接使用

assembly:single

最后使用 以下命令执行就可以了,不需要在将依赖的包加进来,因为 assembly 已经将依赖的包打包进来了:

java -cp gwhyz-test-0.0.1-SNAPSHOT-assembly.jar com.opengroup.hongshi.gwhyz.test.lokia.TestRunner

注意: 由于 assembly 的时候,没有将 main-class 打包到 jar中,所以需要指定 执行的类

如果在生成的 jar 中,将以下语句加入到 MANIFEST.MF 文件中, 就可以直接 使用 java -jar

Main-Class: com.opengroup.hongshi.gwhyz.test.lokia.TestRunner

java -jar gwhyz-test-0.0.1-SNAPSHOT-assembly.jar

4. 配置文件

pom.xml

<build><plugins><plugin><artifactId>maven-assembly-plugin</artifactId><version>2.3</version><configuration><descriptor>src/main/java/assembly/assembly.xml</descriptor></configuration><executions><execution><id>make-assembly</id><phase>package</phase><!-- <goals><goal>single</goal></goals> --><configuration><archive><manifest><mainClass>com.opengroup.hongshi.gwhyz.test.lokia.TestRunner</mainClass></manifest></archive></configuration></execution></executions></plugin></plugins></build>

assembly.xml:

<assembly xmlns="/plugins/maven-assembly-plugin/assembly/1.1.3"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/plugins/maven-assembly-plugin/assembly/1.1.3 /xsd/assembly-1.1.3.xsd"><id>assembly</id><formats><format>jar</format></formats><includeBaseDirectory>false</includeBaseDirectory><dependencySets><dependencySet><outputDirectory>/</outputDirectory><useProjectArtifact>true</useProjectArtifact><unpack>true</unpack><scope>test</scope></dependencySet></dependencySets><fileSets><fileSet><directory>${project.build.directory}/test-classes</directory><outputDirectory>/</outputDirectory><includes><include>**/*.class</include></includes><useDefaultExcludes>true</useDefaultExcludes></fileSet></fileSets></assembly>

project的build path的配置:

5. 解决 MANIFEST.MF 中 不会生成 Main-Class的问题

终于找到原因,为啥 MANIFEST.MF 中,没有Main-class了

是 因为 pom.xml中 配置错了,请看图(左边是正确的配置,右边是错误的)

6. Final result 总结

pom.xml:

<plugin><artifactId>maven-assembly-plugin</artifactId><version>2.3</version><configuration><descriptor>src/main/java/assembly/assembly.xml</descriptor><archive><manifest><mainClass>com.opengroup.hongshi.gwhyz.test.lokia.TestRunner</mainClass></manifest></archive></configuration><executions><execution><id>make-assembly</id><phase>package</phase><goals><goal>single</goal></goals></execution></executions></plugin>

assemble.xml

<assembly xmlns="/plugins/maven-assembly-plugin/assembly/1.1.3"xmlns:xsi="/2001/XMLSchema-instance"xsi:schemaLocation="/plugins/maven-assembly-plugin/assembly/1.1.3 /xsd/assembly-1.1.3.xsd"><id>assembly</id><formats><format>jar</format></formats><includeBaseDirectory>false</includeBaseDirectory><dependencySets><dependencySet><outputDirectory>/</outputDirectory><useProjectArtifact>true</useProjectArtifact><unpack>true</unpack><scope>test</scope></dependencySet></dependencySets><fileSets><fileSet><directory>${project.build.directory}/test-classes</directory><outputDirectory>/</outputDirectory><includes><include>**/*.class</include></includes><useDefaultExcludes>true</useDefaultExcludes></fileSet></fileSets></assembly>

project的build path的配置:

配置好之后:

1. clean

2. 执行 以下命令进行打包

mvn assembly:single

然后使用 以下命令执行

java -jar gwhyz-test-0.0.1-SNAPSHOT-assembly.jar

如果觉得《使用 maven 打包 src/test/java下的文件 并用 java jar 跑打包出来的jar》对你有帮助,请点赞、收藏,并留下你的观点哦!

本内容不代表本网观点和政治立场,如有侵犯你的权益请联系我们处理。
网友评论
网友评论仅供其表达个人看法,并不表明网站立场。