2017-09-11 5 views
0

のルートにコピーされます。Mavenのアセンブリのプラグイン:リソースは、私は<strong>のJava 8</strong>プロジェクトをビルドし、<strong>JAR</strong>ファイルとしてパッケージ化する<strong>のmaven-組立・プラグイン</strong>を使用してい瓶

src/main/resources(通常のMavenリソースディレクトリ)にはいくつかのリソースがあります。 JARを作成すると、src/main/resources以下のすべてのリソースファイルがJARのルートにコピーされます。

FileInputStreamを使用してファイルを開こうとしていますが、これはsrc/main/resourcesにあり、JARファイルとしてパッケージ化せずにプロジェクトを実行すると効果的です。しかし、私がJARファイルからプロジェクトを実行しているときに、私のリソースがもうsrc/main/resourcesになく、代わりに${project.basedir}になっているので、多くはFileNotFoundExceptionになります。

私はそれらをJARファイルのsrc/main/resourcesに配置したいと考えています。出来ますか?

私のビルド構成は以下の通りである:

<build> 
     <sourceDirectory>${project.basedir}/src/main/java</sourceDirectory> 

     <plugins> 
      <plugin> 
       <!-- Build an executable JAR --> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <version>3.0.2</version> 
       <configuration> 
        <archive> 

         <manifest> 
          <addClasspath>true</addClasspath> 
          <classpathPrefix>lib/</classpathPrefix> 
          <mainClass>EmployProject.TestAlgo</mainClass> 
         </manifest> 
        </archive> 
        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
      </plugin> 

      <plugin> 
       <artifactId>maven-assembly-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>single</goal> 
         </goals> 
        </execution> 
       </executions> 

       <configuration> 
        <archive> 
         <manifest> 
          <addClasspath>true</addClasspath> 
          <classpathPrefix>lib/</classpathPrefix> 
          <mainClass>TestAlgo</mainClass> 
         </manifest> 
        </archive> 

        <descriptorRefs> 
         <descriptorRef>jar-with-dependencies</descriptorRef> 
        </descriptorRefs> 
       </configuration> 
      </plugin> 

     </plugins> 

     <resources> 
      <resource> 
       <directory>${project.basedir}/src/main/resources</directory> 
       <includes> 
        <include>**/*.xml</include> 
       </includes> 
      </resource> 
     </resources> 

    </build> 

編集

それが不可能な場合は、どのような、私のコードでは、私は自分のリソースファイルにアクセスするために使用する必要がありますか?

+0

使用Mavenのシェードプラグイン – Arun

+1

うんうーん、なぜ私はそれを使用する必要がありますがJAR内 リソースは、このように私が変更、ファイルではありませんか?どのようなメリットがあり、どのように私の問題を解決するのですか? –

+0

私のリソースファイルはJARに含まれています。問題はそれらが私のプロジェクトのルートに置かれ、コード内でgetClass()。getResource(fileName)を使ってアクセスしようとすると、ファイルが見つからないためにnullが返されるということです。 –

答えて

0

@khmarbaiseのおかげと、このポスト:Accessing a Java Resource as a File

は、私は、リソースを開くために、間違ったAPIを使用していた考え出しました。

XMLDecoder xmlDec = new XMLDecoder(new InputFileStream(this.getClass().getResourceAsStream(fileName)) 

へ:

InputStream in = EnumTools.class.getResourceAsStream(fileName); 
XMLDecoder decoder = new XMLDecoder(in); 
関連する問題

 関連する問題