我正在将Java8应用程序迁移到JDK11 (早期访问)。新代码应该是一个模块。它从Java8属性文件中读取了一条错误消息,但在Java11中返回了'null‘。
感谢您的帮助。
树
├── build.gradle
├── out
│ └── production
│ ├── classes
│ │ ├── com
│ │ │ └── acme
│ │ │ └── Main.class
│ │ └── module-info.class
│ └── resources
│ └── messages
│ └── mymessages.properties
├── settings.gradle
└── src
├── main
│ ├── java
│ │ ├── com
│ │ │ └── acme
│ │ │ └── Main.java
│ │ └── module-info.java
│ └── resources
│ └── messages
│ └── mymessages.properties
└── test
├── java
└── resources
Java
package com.acme;
import java.util.Locale;
import java.util.PropertyResourceBundle;
import java.util.ResourceBundle;
public class Main {
public static void main(String args[]){
Main m=new Main();
m.process();
}
void process(){
PropertyResourceBundle prb= (PropertyResourceBundle)ResourceBundle.getBundle("messages.mymessages",Locale.getDefault());
String key="key1";
String value= prb.getString(key);
System.out.println(key+":"+value);
}
}
Exception in thread "main" java.util.MissingResourceException: Can't find bundle for base name messages.mymessages, locale en_US
at java.base/java.util.ResourceBundle.throwMissingResourceException(ResourceBundle.java:2045)
at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1679)
at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1572)
at java.base/java.util.ResourceBundle.getBundleImpl(ResourceBundle.java:1546)
at java.base/java.util.ResourceBundle.getBundle(ResourceBundle.java:914)
at resource.main/com.acme.Main.process(Main.java:13)
at resource.main/com.acme.Main.main(Main.java:10)
发布于 2018-09-20 07:48:08
对于上面的代码,解决方案是:"--class-path ./out/production/resources“。我想通了。另外,另一种变体是这样的。我有一套JUnits。在测试期间,代码需要从/src/main/resources/messages/mymessages.properties.生成错误消息然而,测试无法从"main“中”看到“资源。经过一天的尝试,不同组合的解决方案是:“--模块-路径...pathTotestClassesOrOtherProductionClasses;$buildDir/resources/main;$buildDir/resources/test;".因此您需要添加".../resources/main“作为模块路径
https://stackoverflow.com/questions/52396829
复制相似问题