资源从它们的类路径根进行解释。而你的情况,当你运行你的程序是这样的:
java -cp etc/application.properties:./lib/properties-loader-0.0.1-SNAPSHOT.jar
根是
./etc/application.properties
./lib/properties-loader-0.0.1-SNAPSHOT.jar
均未包含您application.properties文件(如一个子资源)。如果修改您的命令是这样的:
然后你可以看你的财产在你的程序文件如:
Thread.currentThread().getContextClassLoader().getResourceAsStream("application.properties");
作为一个侧面说明,它总是最好使用在classpath完全合格的路径设置。
*编辑*
这是一个工作的例子,应该说明资源加载:
mkdir props; cd props
mkdir etc; touch etc/application.properties
mkdir test; vi test/PropLoader.java
该内容到编辑器中粘贴然后保存:
package test;
import java.io.InputStream;
public class PropLoader {
public static void main(String[] args) {
try {
final String path;
if(args.length == 1) path = args[0].trim();
else path = "etc/application.properties";
final InputStream is = Thread.currentThread().getContextClassLoader().getResourceAsStream(path);
if(is == null) throw new RuntimeException("Failed to load " + path + " as a resource");
else System.out.printf("Loaded resource from path: %s\n", path);
} catch(Exception e) {
e.printStackTrace();
}
}
}
并测试:
javac test/PropLoader.java
java -cp . test.PropLoader
产量是Loaded resource from path: etc/application.properties
。
@drhirsch我认为在这种情况下,标签'maven-assembly-plugin'标签可能比'assemblies'更合适。 – oschrenk 2012-02-28 18:48:11
当然,把它改成你认为合适的东西 - 但是像以前一样,“组装”是错误的。事实上,正是这个标签,是我带来的 - 它是关于机器码的。每个标签都有一个描述 - 如果您不确定,请阅读它。 – hirschhornsalz 2012-02-28 18:52:31
忘记我可以自己改变它。谢谢你的提示。 – oschrenk 2012-02-28 18:56:54