无法编译和运行类路径java应用程序

pzfprimi  于 2021-07-09  发布在  Java
关注(0)|答案(1)|浏览(497)

在部署java时,我在理解如何管理文件夹和包名方面遇到了严重的问题。我有一个小程序,结构如下:

  1. deployer-classpath.bat
  2. deployer-modulepath.bat
  3. src
  4. data
  5. com
  6. myname
  7. appname
  8. data
  9. *.java
  10. resources.properties
  11. resources_en_GB.properties
  12. main
  13. com
  14. myname
  15. appname
  16. main
  17. App.java (main)

因此,我的意图是有两个包:com.myname.appname.data和com.myname.appname.main,如果我错了,请纠正我,我选择这个布局,以便能够创建两个模块以模块化方式设置应用程序。
我使用deployer-classpath.bat(旧式编译)进行编译:

  1. call "javac.exe" -d ".\output\classes" ".\src\data\com\micesp\PMapp\data\*.java"
  2. call "jar.exe" --create --file ".\output\libs\data.jar" -C ".\output\classes" .
  3. rmdir /q/s ".\output\classes"
  4. mkdir ".\output\classes"
  5. call "javac.exe" -d ".\output\classes" -classpath ".\output\libs\data.jar" ".\src\main\com\micesp\PMapp\main\*.java"
  6. call "jar.exe" -c -f ".\output\libs\main.jar" -C ".\output\classes" .
  7. rmdir /q/s ".\output\classes"
  8. call "java.exe" -classpath "%cd%\output\libs\data.jar";"%cd%\output\libs\main.jar" "com.micesp.PMapp.main.App"
  9. <!-- language: lang-none -->

好吧,这是输出:

  1. Exception in thread "main" java.lang.ExceptionInInitializerError
  2. at com.micesp.PMapp.main.App.main(App.java:25)
  3. Caused by: java.util.MissingResourceException: Can''t find bundle for base name com.micesp.PMapp.data.resources, locale en_GB
  4. at java.base/java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:2055)
  5. at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1689)
  6. at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1593)
  7. at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1556)
  8. at java.base/java.util.ResourceBundle.getBundle(ResourceBundle.java:932)
  9. at com.micesp.PMapp.data.ProductManager$ResourceFormatter.<init>(ProductManager.java:219)
  10. at com.micesp.PMapp.data.ProductManager.<clinit>(ProductManager.java:36)
  11. ... 1 more

如果我使用deployer\u modulepath.bat将其作为模块化应用程序运行,也会得到相同的结果:

  1. call "javac.exe" -d ".\output\classes" ".\src\data\com\micesp\PMapp\data\*.java"
  2. call "jar.exe" --create --file ".\output\libs\data.jar" -C ".\output\classes" .
  3. rmdir /q/s ".\output\classes"
  4. mkdir ".\output\classes"
  5. call "javac.exe" -d ".\output\classes" -classpath ".\output\libs\data.jar" ".\src\main\com\micesp\PMapp\main\*.java"
  6. call "jar.exe" -c -f ".\output\libs\main.jar" -C ".\output\classes" .
  7. rmdir /q/s ".\output\classes"
  8. call "java.exe" --module-path ".\output\libs" -m "main/com.micesp.PMapp.main.App"
qpgpyjmq

qpgpyjmq1#

如果不能亲自尝试,就很难诊断问题。但是你确定jar包含你认为它们包含的内容并且在正确的文件夹中吗?手动编写编译和打包脚本可能是错误的来源。用java手工做这类事情需要很多东西才能完全正确。这就是为什么通常使用ant、maven等构建工具,也是人们使用ide的原因。您可以选择一个工具,对源代码进行布局以匹配工具首选项,然后利用该工具的能力来抽象出编译和打包的所有复杂性。
我建议您将maven作为一个很好的起点,重新设计您的文件夹结构,以便更好地使用它。

相关问题