2012-08-14 109 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"))); 
相关问题