2010-11-26 19 views
2

maven jarパッケージの中にあるファイルを開く必要があります。これは私が使用するフレームワークのモデル構成であり、ライブラリクラスのコンストラクタはファイルのオブジェクトを渡す必要があります。クラスローダーを使用して設定ファイルへのパスを問題なく取得できます。しかし - 残念なことに - ファイルはjarファイルを読むことができません。だから、私はを取得します。java.io.FileNotFoundException。今私はこの問題の解決策を探しています。私の計画は、モデル構成ファイルを解凍して一時ディレクトリに置くことです。しかし、コーディングを始める前に、私のような問題に対して他に解決策があるかどうかを知りたい。Mavenパッケージjarパッケージ内のファイル(* File *として)を開きます

更新:実行時にファイルを読み取る必要があります。あなたはMavenのビルドから、それをやっている場合は

+0

ビルド時または実行時にJARファイルから抽出/読み込みが必要なファイルはありますか?以下の2つの大きな回答がありますが、どちらも開発プロセスとランタイムプロセスの異なるポイントでタスクを実行します。 – jgifford25

答えて

3

私はあなたが必要なものを見つけるまでは、JARエントリを1つずつを横断、JarInputStreamを使うべきだと思います。次に、read()の内容が見つかりましたJarEntryです。

+0

ライブラリにファイルが必要な場合には役に立ちません。 –

+0

JARから 'read()'を実行し、一時的な 'ファイル'に保存できます。この場合でも、JARをプロジェクトに展開するよりも効果的です。 – yegor256

+0

あなたのヒントをありがとう、私の問題を解決することができます。 ClassLoaderを使用してファイル(jarファイル内のパス)を見つけ出し、それを一時ディレクトリに展開し、* FILE *として開きました。 – Skarab

4

は、使用してファイルにJARリソースを展開

  • dependency:unpack-dependencies

    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
        <execution> 
        <id>unpack-dependencies</id> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>unpack-dependencies</goal> 
        </goals> 
        <configuration> 
         <includeGroupIds>the.groupId</includeGroupIds> 
         <includeArtifactIds>the.artifactId</includeArtifactIds> 
         <includes>**/path/to/your/resource.txt</includes> 
         <outputDirectory>where/do/you/want/it</outputDirectory> 
        </configuration> 
        </execution> 
    </executions> 
    </plugin> 
    
(jarファイルは、プロジェクトのMavenのdependeniesのいずれかの場合)

または使用

  • dependency:unpack(jarファイルがまだMavenの成果物として使用可能な依存関係はありませんが、あれば)

    <plugin> 
    <groupId>org.apache.maven.plugins</groupId> 
    <artifactId>maven-dependency-plugin</artifactId> 
    <executions> 
        <execution> 
        <id>unpack</id> 
        <phase>generate-resources</phase> 
        <goals> 
         <goal>unpack</goal> 
        </goals> 
        <configuration> 
         <artifactItems> 
         <artifactItem> 
          <groupId>the.groupid</groupId> 
          <artifactId>the.artifactid</artifactId> 
          <version>the.version</version> 
          <type>jar</type> 
          <outputDirectory>where/do/you/want/it</outputDirectory> 
          <includes>**/path/to/your/resource.txt</includes> 
         </artifactItem> 
         </artifactItems> 
        </configuration> 
        </execution> 
    </executions> 
    </plugin> 
    
関連する問題