我遇到了wsgen
的问题,虽然我看到了一些有效的答案,但这些解决方案似乎都不适合我。我相信这个问题与源代码和二进制文件的结构有关。
我的WSTest
项目是用以下文件夹设置的:
bin
└───com
└───example
└───ws
src
└───com
└───example
└───ws
主类是驻留在包com.example.ws
中的Test
。
我使用以下命令从主项目文件夹WSTest
运行wsgen
:
wsgen -cp ./bin/com/example/ws -d ./src/com/example/ws -s ./src/com/example/ws Test
这导致:
线程"main"java.lang.NoClassDefFoundError中出现异常(错误名称:com/example/ws/Test)
这是有道理的,因为类是包的一部分。因此,我将命令更改为以下内容:
wsgen -cp ./bin/com/example/ws -d ./src/com/example/ws -s ./src/com/example/ws com.example.ws.Test
但现在我得到了wsgen
工具中找不到的类:
找不到类:"com.example.ws.Test"
用法:WSGEN[选项]
我错过了什么?
你试过这样的东西吗?
wsgen -cp ./bin -d ./src -s ./src com.example.ws.Test
类路径文件夹是wsgen
查找类文件时使用的。类中的包被解析为文件夹路径,因此com.example.ws.Test
应该是bin
类路径文件夹中类似com/example/ws/Test.class
的文件。
来自Java文档:
每个类路径都应该以一个文件名或目录结束,这取决于您将类路径设置为:
- 对于包含.class文件的.jar或.zip文件,类路径以.zip或.jar文件的名称结束
- 对于未命名包中的.class文件,类路径以包含.class的目录结束
- 对于命名包中的.class文件,类路径以包含"的目录结束;根";包(完整包名称中的第一个包)