1

我有一个 Maven 父 pom 和 2 个子项目。我正在使用 Spring,并且无法让类路径从 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 到 parent 并返回到 config.xml 的相对路径。

4

2 回答 2

1

src/main/resources 仅用于保存源资源。构建 JAR 时,该目录中的文件将复制到 JAR 中,并与构建 src/main/java 文件的位置一起。

如果 child_1 和 child_2 项目的 JAR 都在您的类路径中,您的代码应如下所示:

ApplicationContext ctx = new GenericXmlApplicationContext("config.xml");
于 2012-05-31T02:57:56.990 回答
-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/

顺便说一句 - 你应该在你的 IDE 中包含 spring 的源代码并浏览源代码,这就是我所做的,可以很容易地弄清楚发生了什么,你可以通过调试器运行。

如果您使用 IDEA 和 Maven,这在 IDE 中自动可用,只需从 maven 窗口中选择“下载源”。(或浏览IDEA中的类,并在打开类文件时单击“dwonload sources”)

于 2012-05-31T02:53:26.780 回答