2012-05-31 43 views
1

我有一個Maven家長pom和2個子項目。我正在使用Spring,並且無法讓classpath從child_project_2指向child_project_1中的資源。如何使用Maven父級pom/child poms目錄結構指向Spring資源?

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 /主/資源/ 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。

回答

1

src/main/resources只在保留源資源的位置。在構建JAR時,將該目錄中的文件與構建src/main/java文件的位置一起復制到JAR中。

如果同時爲JAR文件和child_1項目child_2對你的類路徑中,你的代碼應該是這樣的:

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

編輯 - 根據你的意見,此外:項目1需要是項目2的依賴項(或創建一個通用模塊,並使每個依賴於它)。

再次編輯 - 從網址中刪除src/main/resources。

您正在使用的構造函數的參數是一個資源。嘗試

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

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

我總是用後者,而且它可能是你打算在這裏。

使用maven時,src/main/resources中的東西將放在類路徑中。

更多關於什麼春天的資源,即使它現在基本上無關緊要: http://www.mkyong.com/spring/spring-resource-loader-with-getresource-example/

順便說一句 - 你應該包括春天的來源,你的IDE和瀏覽源代碼,這就是我所做的,可以很容易要弄清楚發生了什麼,你可以運行調試器。

如果您使用IDEA和Maven,這可以在IDE中自動使用,只需從maven窗口中選擇「下載源代碼」即可。 (或者瀏覽到IDEA中的類,並在打開類文件時點擊'dwonload sources')

+0

所以給我的圖,當我運行app1.java,兩個以上行,你給工作精細。但是,當從app2.java運行時,我無法獲得類路徑來查找位於child_1/src/main/resources中的config.xml。 所以我的問題的重點是,我不想做一個config.xml的副本,並將其填充到每個孩子的src/main/resources文件夾中。相反,我想讓app [n] .java能夠加載配置。xml from child_1/src/main/resources/config.xml。但是我無法獲得正確的類路徑。 – rallison

+0

如果你想讓它在兩個應用中都可用,創建一個名爲common的第三個模塊,並使app1和app2依賴於普通(通過添加它作爲它們的poms的依賴)。或者你可以讓app2依賴於app1。但你不能讓app1和app2互相依賴,這是一個循環依賴(雞和蛋問題 - 首先被構建?) – ianpojman

+0

你對使用資源修復它的評論。從child_2: res = new FileSystemResource(「child_1/src/main/resources/config.xml」); ApplicationContext ctx = new GenericXmlApplicationContext(res); – rallison

相關問題