0

在部署 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.datacom.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_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"
4

1 回答 1

0

如果不能自己尝试,很难诊断问题。但是您确定 JAR 包含您认为它们包含的内容并且在正确的文件夹中吗?您手动编写的编译和打包脚本可能是错误的来源。使用 Java 手动执行此类操作需要很多事情才能完全正确。这就是为什么通常使用 ant、maven 等构建工具的原因,也是人们使用 IDE 的原因。您选择一个工具,布局您的源代码以匹配工具偏好,然后利用该工具的能力来抽象出编译和打包的所有复杂性。

我建议您将Maven视为一个很好的起点,并重新设计您的文件夹结构以使其很好地发挥作用。

于 2021-04-22T13:43:24.947 回答