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

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

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

deployer-classpath.bat
deployer-modulepath.bat
src
   data
      com
         myname
            appname
               data
                  *.java
                  resources.properties
                  resources_en_GB.properties
   main
      com
         myname
            appname
               main
                  App.java (main)

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

call "javac.exe" -d ".\output\classes" ".\src\data\com\micesp\PMapp\data\*.java"
call "jar.exe" --create --file ".\output\libs\data.jar" -C ".\output\classes" .

rmdir /q/s ".\output\classes"
mkdir ".\output\classes"

call "javac.exe" -d ".\output\classes" -classpath ".\output\libs\data.jar" ".\src\main\com\micesp\PMapp\main\*.java"
call "jar.exe" -c -f ".\output\libs\main.jar" -C ".\output\classes" .

rmdir /q/s ".\output\classes"

call "java.exe" -classpath "%cd%\output\libs\data.jar";"%cd%\output\libs\main.jar" "com.micesp.PMapp.main.App"
<!-- language: lang-none -->

好吧,这是输出:

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

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

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

qpgpyjmq1#

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

相关问题