2012-08-14 107 views
2

我有一個2個模塊的maven項目。有一個抓取模塊取決於核心模塊。每個模塊在src/main/resources /中都有自己的config.ini文件,每個模塊只有一個主類。mvn exec:java失敗,FileNotFoundException

現在我要開始這樣的NewsCrawler:

mvn exec:java -Dexec.mainClass="org.aksw.simba.rdflivenews.NewsCrawler" 

這適用於裝載爬蟲自己的配置文件,但加載失敗,從核心模塊的配置文件:

NewsCrawler.CONFIG = new Config(new Ini(File.class.getResourceAsStream("/newscrawler-config.ini"))); 
RdfLiveNews.CONFIG = new Config(new Ini(File.class.getResourceAsStream("/rdflivenews-config.ini"))); 

的第二次配置加載失敗並帶有NullPointerException。我檢查了jar文件,並且配置文件在裏面。奇怪的是相同的兩行工作在測試用例中。同樣在eclipse中,我可以毫無問題地啓動課程的主要部分。

回答

2

這裏是well-functioning source code of your example

dezip,然後在命令行上,轉到目錄包含父POM然後執行:

mvn clean test 

做這樣的事情知道你在哪裏調用的getResourceAsStream()時:

try { 
    IniFile = new Ini(File.class.getResourceAsStream("/newscrawler-config.ini")); 
} catch(Exception e) { 
    System.out.println("Resource file not found : " + File.class.getResource(".")); 
} 

也試着在newscrawler-config.ini之前刪除/。這取決於您將文件放在層次結構中的位置。 getResourceAsStream搜索CLASSPATH,而不是源路徑。您也可以使用this.getClass().getResourceAsStream()而不是File.class.getResourceAsStream()

這可能是一個解決方案到src /主/資源在你的pom.xml配置資源複製到目標/測試類:

<build> 
    <resources> 
    <resource> 
     <filtering>false</filtering> 
     <directory>${basedir}/src/main/resource</directory> 
    </resource> 
    </resources> 
    <testResources> 
    <testResource> 
     <filtering>false</filtering> 
     <directory>${basedir}/src/main/resource</directory> 
    </testResource> 
    </testResources> 
</build> 

與準全和調用的getResourceAsStream() -path:

this.class.getResourceAsStream("/com/jeromeradix/stackoverflow/newscrawler/newscrawler-config.ini")); 
+0

System.out.println(「Resource file not found:」+ File.class.getResource(「。」)); - >資源文件未找到:null – 2012-08-14 15:58:03

+0

我已經添加了一個鏈接,其中包含您的案例的函數示例的源代碼。希望這個幫助。 – 2012-08-14 16:02:43

0

這解決了我的問題!我想我看錯了(類)路徑...

NewsCrawler.CONFIG = new Config(new Ini(NewsCrawler.class.getResourceAsStream("/newscrawler-config.ini"))); 
RdfLiveNews.CONFIG = new Config(new Ini(RdfLiveNews.class.getResourceAsStream("/rdflivenews-config.ini"))); 
相關問題