2012-01-28 16 views
0

私のプロジェクトでresourcesからファイルをインポートしようとしています。私はSOLVER_CONFIGを指定してresourcesのルートからsolver.xmlを取得しました。`resources`ディレクトリからファイルが検出されません

package in.co.technovia.sudoku; 

import java.util.ArrayList; 
.... 
public class App{ 
    private static final String SOLVER_CONFIG = "/solver.xml"; 
    public static void main(String[] args){ 
    SudokuGenerator sg = new SudokuGenerator(); 
    .... 
    } 

    private static Solver createSolver(){ 

    XmlSolverConfigurer configurer = new XmlSolverConfigurer(); 
     configurer.configure(SOLVER_CONFIG); 
     return configurer.buildSolver(); 
    } 
} 

resourcesのルートからsolver.xmlを取ることになっています。それはthis caseで動作しますが、気まぐれのJava神は私のプロジェクトのためにそう命じ:

[email protected]:~/dev/drools/sudoku$ java in.co.technovia.sudoku.AppException in thread "main" java.lang.IllegalArgumentException: The solver configuration (/solver.xml) does not exist. 
    at org.drools.planner.config.XmlSolverConfigurer.configure(XmlSolverConfigurer.java:79) 
    at in.co.technovia.sudoku.App.createSolver(App.java:67) 
    at in.co.technovia.sudoku.App.main(App.java:43) 

質問:なぜresourcesからファイルを検出ありえないJavaの?


私はsrc/main/java/in/co/technovia/sudoku/アプリケーションとsrc/main/resources/ディレクトリと現在のクラスパスの内容が含まれています。

[email protected]:~/dev/drools/sudoku$ ls src/main/resources/ 
score.drl score.drl~ solver.xml solver.xml~ 

[email protected]:~/dev/drools/sudoku$ ls src/main/java/in/co/technovia/sudoku/ 
App.class App.java~ helloworld.class helloworld.java~ 
App.java domain  helloworld.java solution 

[email protected]:~/dev/drools/sudoku$ export | grep CLASSPATHdeclare -x 
CLASSPATH=".:/home/jesvin/dev/drools/sudoku/binaries/*:/home/jesvin/dev/drools/sudoku/src/main/java" 


ソリューション:khmarbaiseは彼の答えで述べているとして、ディレクトリはMavenのビルドのためのものです。ディレクトリを含めるには、 'https://stackoverflow.com/a/9045680/604511'を参照してください。

答えて

1

Mavenビルドで意図しているsrc/main/resourcesフォルダと間違えているようです。

this.getResourceAsStream("/solver.xml")... 

バックのInputStreamの代わりに、Fileオブジェクトをあなたを与える:フォルダのsrc /メイン/リソースは、あなたが使用して、Javaアプリケーションで使用できるリソースを表し、ターゲット/ classesフォルダにビルド中にコピーされます。次のようにしてファイルを取得することができますが、この方法はクラスパスのJARでは使用できません。ファイルとディレクトリのみでは動作しません。

URL dir_url = ClassLoader.getSystemResource(dir_path); 
// Turn the resource into a File object 
File dir = new File(dir_url.toURI()); 
+0

"これはMavenビルドの意図です"しかし、[このプロジェクト](https://github.com/diega/drools-planner-poc/tree/master/src/main)私はモデリングしていません。 Mavenビルド。 – aitchnyu

+0

はい、リソースは既に使用されています[記述したように](http://grepcode.com/file/repository.jboss。org/maven2/org.drools.solver/drools-solver-core/5.0.0.M5/org/drools/solver/config /XmlSolverConfigurer.java#XmlSolverConfigurer.configure%28java.lang.String%29)しかし、それを正しい場所に向けるのですか? – aitchnyu

1

は、使用してみてください:

private static final String SOLVER_CONFIG = "resources/solver.xml"; 

あなたはJavaは外部ファイルを見つけるために、そのディレクトリを使用することを意味するものではありません、あなたのクラスパスにディレクトリを追加しているという事実を。それは、そのディレクトリを使用して、そのディレクトリ内でクラスを見つけることを意味します。

solver.xmlファイルはクラスファイルではありません。ファイルは、ファイルシステムで見つかっする必要がありますようにするため

File f = new File("solver.xml"); 

:あなたは、おそらくのようなファイルシステム関連のクラスを介してsolver.xmlにアクセスしています。 "/solver.xml"を使用している場合、solver.xmlという名前のファイルを開くようにJavaに指示します。このファイルは、ルート/ディレクトリにあります。

+0

同じエラーです。 – aitchnyu

+0

ソルバーファイルにabosulteパスを使用してみてください。 '/ tmp/solver.xml'のようなものです。それを 'SOLVER_CONFIG'変数に反映させてみてください。 –

+0

Pablo私は 'Class.getResourceAsStream(...) 'を介してリソースを読み込むことに関する情報を追加するだけです。それとあなたの答えは問題を解決するのに十分なはずです。 –

関連する問題