Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/spring/13.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/4/maven/5.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
如何使用Maven父pom/子poms目录结构指向Spring资源?_Spring_Maven_Classpath - Fatal编程技术网

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

如何使用Maven父pom/子poms目录结构指向Spring资源?,spring,maven,classpath,Spring,Maven,Classpath,我有一个Maven父pom和两个子项目。我正在使用Spring,无法获取从child_project_2指向child_project_1中资源的类路径 parent child_1 - src - main - java - com - company - package1 - app1.java - resources

我有一个Maven父pom和两个子项目。我正在使用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=新的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的相对路径

编辑-根据您的评论,另外:项目1需要是项目2的依赖项(或者创建一个公共模块,使每个模块都依赖于它)

再次编辑-从URL中删除src/main/resources

您正在使用的构造函数的参数是一个资源。试一试

ApplicationContext ctx = 
    new GenericXmlApplicationContext("classpath:config.xml");

我总是使用后者,这可能就是你在这里的意图

使用maven,src/main/resources中的内容将放在类路径上

关于Spring资源是什么的更多信息,尽管现在基本上不相关:

顺便说一句,您应该在IDE中包含spring的源代码并浏览源代码,这就是我所做的,这样可以很容易地了解发生了什么,您只需运行调试器即可


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

src/main/resources是保存源资源的唯一位置。构建JAR时,该目录中的文件将被复制到构建src/main/java文件的JAR中

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

ApplicationContext ctx = new GenericXmlApplicationContext("config.xml");

在我的图表中,当我运行app1.java时,上面两行代码都很好。但是,当从app2.java运行时,我无法获取类路径来查找位于child_1/src/main/resources中的config.xml。因此,我的问题是,我不想复制config.xml并将其放入每个孩子的src/main/resources文件夹中。相反,我希望app[n].java能够从child_1/src/main/resources/config.xml加载config.xml。但是,我无法获得正确的类路径。如果您希望它在两个应用程序中都可用,请创建第三个名为common的模块,并使app1和app2依赖于common(通过将其作为依赖项添加到它们的POM中)。或者您可以使app2依赖于app1。但是你不能让app1和app2相互依赖,这是一个循环依赖(鸡和蛋的问题-哪个先构建?)你关于使用资源的评论修复了它。来自child_2:res=newfilesystemresource(“child_1/src/main/resources/config.xml”);ApplicationContext ctx=新的通用XmlApplicationContext(res);但这并不好,它将您绑定到一个特定的文件位置——一旦您将应用程序打包为jar,它就会停止工作。类加载器资源更具可移植性。。。所以你已经在构建时解决了你的问题。。。但是一旦你把它打包。。你会再次遇到问题的请看我的回答。当您在类路径上标识它时,不需要“src/main/resources”(事实上,这将导致它无法工作)。
ApplicationContext ctx = new GenericXmlApplicationContext("config.xml");