gpt4 book ai didi

java - 对批处理文件的更改未按我预期的方式工作

转载 作者:行者123 更新时间:2023-12-02 01:14:32 24 4
gpt4 key购买 nike

我正在阅读 Jeff Langr 所著的《Agile Java》一书,并设置了一个批处理文件 (run.bat) 来编译和运行我的类。随着更多包的引入,我刚刚更改了我的文件结构,并且感觉我理解了类路径,但是我尝试进行的一项调整并没有按照我预期的方式工作。

使用以下批处理文件,一切都可以编译并正常运行:

@echo off
javac -classpath C:\junit3.8.1.jar;C:\AgileJava\Lessons studentinfo\*.java reports\*.java
if not errorlevel 1 java -cp C:\junit3.8.1.jar;C:\AgileJava\Lessons junit.awtui.TestRunner sis.studentinfo.AllTests

我尝试按如下方式做出最后一条语句(将\sis 添加到类路径并从 Studentinfo.AllTests 中删除对 sis 的引用):

if not errorlevel 1 java -cp C:\junit3.8.1.jar;C:\AgileJava\Lessons\sis junit.awtui.TestRunner studentinfo.AllTests 

但出现以下错误:

Exception in thread "main" java.lang.NoClassDefFoundError: studentinfo/AllTests (wrong name: sis/studentinfo/AllTests)
at java.lang.ClassLoader.defineClass1(Native Method)
at java.lang.ClassLoader.defineClass(Unknown Source)
at java.lang.ClassLoader.defineClass(Unknown Source)
at junit.runner.TestCaseClassLoader.loadClass(TestCaseClassLoader.java:104)
at junit.runner.ReloadingTestSuiteLoader.load(ReloadingTestSuiteLoader.java:9)
at junit.runner.BaseTestRunner.loadSuiteClass(BaseTestRunner.java:193)
at junit.runner.BaseTestRunner.getTest(BaseTestRunner.java:86)
at junit.awtui.TestRunner.runSuite(TestRunner.java:455)
at junit.awtui.TestRunner.start(TestRunner.java:536)
at junit.awtui.TestRunner.main(TestRunner.java:382)

谁能解释一下为什么吗?我知道这是因为它没有找到 AllTests 类,但我不知道我还能如何得到它。

最佳答案

您正在向 junit.awtui.TestRunner 传递一个类的名称,它应该在其中找到一些测试。

您需要传递“完全限定的类名”,它是声明类的包,后跟其类名。当您编写类 AllTests 时,您指定了它位于哪个包中。看起来您指定了它位于 sis.studentinfo 中,这意味着完全限定名称是sis.studentinfo.AllTests。名称 studentinfo.AllTests 引用了一个不同的类,该类显然不存在。

请注意,当您指定类路径时,您只是指定 java 将在哪些目录(和/或文件)中查找类 - 它不会改变您引用该类的方式 - 类名与类路径。

关于java - 对批处理文件的更改未按我预期的方式工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/58883642/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com