【发布时间】:2014-05-28 09:20:17
【问题描述】:
我有一个 jar 类型的 maven 项目。这旨在成为作为服务运行的独立 Java SE 应用程序。像往常一样,它有自己的 app.properties 文件,其中包含数据库连接信息等属性。所以这不是要上传到 maven Central 的项目,它应该留在我的组织中,并且在 jar 旁边有一个属性文件是有意义的。
我见过很多地方人们只是将应用程序属性文件放在 src/main/resources 中。但这会被复制到罐子里,这正是我不想要的。
我可以设法让 maven 复制里面的内容,例如 src/main/external-resources/* 到 target/*,所以当我打包项目时,我可以轻松地做 java -jar ... 并且属性文件在 jar 旁边。
但是与期望属性文件位于 src/main/external-resources 内的 Netbeans 混淆
- 如何在调试时使 app.properties 文件在 IDE 的类路径中可用。意味着我可以使用
new File("app.properties")访问该文件 - 当我打包我的应用程序时,如何使 app.properties 文件与 .jar 文件并排放置。
基本上我希望能够在我的 IDE 中调试我的程序并使用带有new File("app.properties") 的属性文件,然后在打包或组装应用程序时我想做 java -jar ...并且应用程序仍然可以使用 new File("app.properties") 访问它的属性文件(在 jar 旁边)
奖励:如果按照惯例这是不可能的并且我必须围绕它工作,为什么....到目前为止还没有 maven 将其更改?
【问题讨论】:
-
也许值得检查:maven.apache.org/plugins/maven-war-plugin/examples/… 我也同意@Seelenvirtuose。
-
好的,我使用的是Eclipse,所以我不知道如何让Netbeans在运行时看到这个文件。在 Eclipse 中,main/java、main/resources、test/java 和 test/resources 这四个目录位于构建路径上,因此在运行主类时位于类路径上。对于此类属性文件,我们将其放入 test/resources.xml 中。正如我之前所说,它在类路径中。关于包装,我想我已经回答过了。
-
改用 maven-jar-plugin。
-
@Seelenvirtuose Eclipse 和 Netbeans 的工作原理相同。如果 app.properties 在您提到的类路径中,我仍然无法通过 new File("app.properties") 访问它,我必须执行 new File("src/main/java/resources")。然后我需要从 jar 文件中排除该属性文件并将其与 jar 一起复制。这是这种情况的惯例吗?
-
嗯……你永远不应该用
new File(...)加载resources(这样的属性文件是你的应用程序的资源)。为此,请始终使用类加载器的方法getResource()。因此,在您的代码中,您可以通过loader.getResource("app.properties")加载它,这取决于资源位于类路径的根目录中。