mvn exec:java因FileNotFoundException而失败

时间:2012-08-14 12:47:21

标签: java maven exec

我有一个包含2个模块的maven项目。有一个爬虫模块,它依赖于核心模块。每个模块在src / main / resources /中都有自己的config.ini文件,每个模块有一个主要的主类。

现在我想像这样启动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 个答案:

答案 0 :(得分:2)

这是 well-functioning source code of your example

解压缩,然后在命令行上,转到包含父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()

通过在pom.xml中配置资源,可以将src / main / resource复制到target / test-classes:

<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():

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

答案 1 :(得分: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")));