我有一个Maven父母pom和2个子项目。我正在使用Spring,并且无法将classpath从child_project_2指向child_project_1中的资源。
parent
child_1
- src
- main
- java
- com
- company
- package1
- app1.java
- resources
-config.xml
child_2
- src
- main
- java
- com
- company
- package2
- app2.java
- resources
当我运行app1.java时,我使用:
加载config.xml文件ApplicationContext ctx = new GenericXmlApplicationContext(“src / main / resources / config.xml”);
但是当我运行app2.java,并且需要在config.xml中加载时,我似乎无法使类路径正确。使用这个Maven目录结构,我使用Spring的所有子项目如何指向位于child_1 / src / main / resources / config.xml的同一个config.xml文件?
我在本地计算机上尝试过绝对路径。我已经尝试了从child_2到parent并返回到config.xml的相对路径,以及从child_2 / src / main / resources返回到父节点并返回到config.xml的相对路径。
答案 0 :(得分:1)
src / main / resources仅用于保存源资源的位置。构建JAR时,该目录中的文件将被复制到JAR以及构建src / main / java文件的位置。
如果child_1和child_2项目的两个JAR都在您的类路径中,那么您的代码应如下所示:
ApplicationContext ctx = new GenericXmlApplicationContext("config.xml");
答案 1 :(得分:-1)
编辑 - 基于您的评论,另外:项目1需要是项目2的依赖项(或创建一个公共模块,并使每个模块依赖于它)。
再次编辑 - 从网址中删除src / main / resources。
您正在使用的构造函数的参数是一个资源。尝试
ApplicationContext ctx =
new GenericXmlApplicationContext("classpath:config.xml");
或
ApplicationContext ctx =
new ClassPathXmlApplicationContext("config.xml");
我总是使用后者,这可能就是你想要的。
使用maven,src / main / resources中的内容将放在类路径上。
有关Spring资源的更多信息,即使它现在基本上无关紧要: http://www.mkyong.com/spring/spring-resource-loader-with-getresource-example/
BTW - 您应该在IDE中包含spring的源代码并浏览源代码,这就是我所做的,可以很容易地弄清楚发生了什么,你可以通过调试器运行。如果您使用IDEA和Maven,这将在IDE中自动提供,只需从maven窗口中选择“下载源”即可。 (或浏览到IDEA中的类,并在打开类文件时单击“dwonload sources”)