终端运行JUnit测试遇双错误求助:无主清单属性+org.junit包不存在
问题描述
- 直接在终端运行JUnit测试命令报错:
C:\work\apps\jdk1.8.0_131-x64\bin\java -jar C:\work\apps\jdk1.8.0_131-x64\bin\junit-4.13.2.jar C:\Users\silvacl1\Desktop\actimizemse-batch-java\src\main\java\com\natixis\tests\junit\JunitTests
错误信息:no main manifest attribute, in C:\work\apps\jdk1.8.0_131-x64\bin\junit-4.13.2.jar
- 执行编译命令时报错:
C:/work/apps/jdk1.8.0_131-x64/bin/javac -cp C:/Users/silvacl1/.m2/repository/com/github/noraui/ojdbc8/12.2.0.1/ojdbc8-12.2.0.1.jar;C:/Users/silvacl1/.m2/repository/com/sun/mail/javax.mail/1.6.2/javax.mail-1.6.2.jar;C:/Users/silvacl1/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar;C:/Users/silvacl1/.m2/repository/org/apache/httpcomponents/httpcore/4.4/httpcore-4.4.jar;C:/Users/silvacl1/.m2/repository/org/junit.jar;. -d out -sourcepath . src/main/java/com/natixis/tests/main/TestsMain.java src/main/java/com/natixis/ws/util/*.java src/main/java/com/natixis/tests/junit/*.java src/main/java/com/natixis/tests/junit/JunitTests.java src\main\java\com\natixis\tests\junit\JunitTests.java
错误信息:package org.junit does not exist
已在pom.xml添加依赖:
<dependency> <groupId>junit</groupId> <artifactId>junit</artifactId> <version>4.13</version> <scope>test</scope> </dependency>
解决方案
1. 修复「no main manifest attribute」错误
JUnit的jar包本身未定义主类,不能直接用java -jar启动。正确方式是指定JUnit运行器类org.junit.runner.JUnitCore,同时将JUnit jar和编译后的测试类加入类路径:
C:\work\apps\jdk1.8.0_131-x64\bin\java -cp "C:\work\apps\jdk1.8.0_131-x64\bin\junit-4.13.2.jar;C:\Users\silvacl1\Desktop\actimizemse-batch-java\out" org.junit.runner.JUnitCore com.natixis.tests.junit.JunitTests
- 用
-cp指定类路径,包含JUnit jar文件和编译后的class文件输出目录(这里假设输出目录为out) - 最后指定测试类的全限定类名
2. 修复「package org.junit does not exist」编译错误
原因
- pom.xml中JUnit依赖的
scope为test,该依赖仅在测试阶段生效,直接用javac编译主代码时不会自动引入 - 编译命令中指定的
C:/Users/silvacl1/.m2/repository/org/junit.jar路径错误,Maven仓库中JUnit的实际路径应为C:/Users/silvacl1/.m2/repository/junit/junit/4.13/junit-4.13.jar(与pom中版本对应)
修复方式
方式一:修正编译命令的类路径
替换错误的JUnit jar路径,同时清理重复的编译条目:
C:/work/apps/jdk1.8.0_131-x64/bin/javac -cp "C:/Users/silvacl1/.m2/repository/junit/junit/4.13/junit-4.13.jar;C:/Users/silvacl1/.m2/repository/com/github/noraui/ojdbc8/12.2.0.1/ojdbc8-12.2.0.1.jar;C:/Users/silvacl1/.m2/repository/com/sun/mail/javax.mail/1.6.2/javax.mail-1.6.2.jar;C:/Users/silvacl1/.m2/repository/commons-lang/commons-lang/2.6/commons-lang-2.6.jar;C:/Users/silvacl1/.m2/repository/org/apache/httpcomponents/httpcore/4.4/httpcore-4.4.jar;." -d out -sourcepath . src/main/java/com/natixis/tests/main/TestsMain.java src/main/java/com/natixis/ws/util/*.java src/main/java/com/natixis/tests/junit/*.java
- Windows系统下类路径用分号
;分隔,路径含空格时需用引号包裹
方式二:用Maven编译运行(推荐)
依赖pom.xml的配置,直接用Maven命令处理,无需手动维护类路径:
- 编译项目:
mvn compile - 运行所有JUnit测试:
mvn test - 单独运行指定测试类:
mvn test -Dtest=JunitTests
注意:若测试类放在src/main/java下,建议移至src/test/java目录(符合Maven项目结构规范),test scope的依赖默认仅作用于该目录下的代码。若不想移动,需将pom中JUnit的scope改为compile,或编译主代码时手动引入测试依赖。
内容的提问来源于stack exchange,提问作者Claudia Martins
相关产品推荐
相关产品推荐

