2

2 つのモジュールを含む Maven プロジェクトがあります。コアモジュールに依存するクローラーモジュールがあります。各モジュールには、src/main/resources/ に独自の config.ini ファイルがあり、モジュールごとに 1 つのメイン クラスがあります。

ここで、次のように 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")));

2 番目の構成の読み込みは、NullPointerException で失敗します。私はjarファイルをチェックし、設定ファイルは中にあります。奇妙なことに、同じ 2 行がテスト ケースで機能します。また、Eclipseを使用すると、クラスのメインを問題なく開始できます。

4

2 に答える 2

2

これがあなたの例のうまく機能しているソースコードです

解凍してから、コマンドラインで親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"));
于 2012-08-14T14:32:37.417 に答える
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")));
于 2012-08-14T16:05:02.640 に答える