如何使用Maven父pom / child poms目录结构指向Spring资源?

时间:2012-05-31 02:20:32

标签: spring maven classpath

我有一个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的相对路径。

2 个答案:

答案 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”)