2017-03-19 5 views
0

私は次のディレクトリ構造を持つドロップウィザードプロジェクトました:- 0.0.1-SNAPSHOT.jarに

basedir 
    pom.xml 
    config.yml 
    src 
    main 
     resources 
     myresource.xml 
The build portion of 
<build> 
    <finalName>project-${version}</finalName> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-compiler-plugin</artifactId> 
      <version>3.1</version> 
      <configuration> 
       <source>1.8</source> 
       <target>1.8</target> 
      </configuration> 
     </plugin> 
     <plugin> 
      <groupId>org.apache.maven.plugins</groupId> 
      <artifactId>maven-shade-plugin</artifactId> 
      <version>2.1</version> 
      <executions> 
       <execution> 
        <phase>package</phase> 
        <goals> 
         <goal>shade</goal> 
        </goals> 
        <configuration> 
         <transformers> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer"> 
           <mainClass>project-package.App</mainClass> 
          </transformer> 
          <transformer implementation="org.apache.maven.plugins.shade.resource.ServicesResourceTransformer"> 
          </transformer> 
         </transformers> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 
    </plugins> 
</build> 

IをEclipseから自分のコードを実行すると、次のようなコマンドが使用されます。
$ mypackage.Appサーバーconfig.yml
正常に動作し、resourcesディレクトリの下のファイルを読み取ることができます。 ビルドにmvnを使用すると、作成されたスナップショットjarにはconfig.ymlが含まれず、basedirのsnapshot.jarに含まれていても "myresource.xml"へのパスはありません。だから、私はjarファイルから実行すると、私のコードはリソースとしてそれを見つけることはありません。 pom.xmlを変更してconfig.ymlをインクルードし、リソースディレクトリとしてリソースとしてアクセスできるようにパッケージ化する必要があります。

+0

'dropwizard'の構成の主な考え方は、構成を外部化することです。 dropwizardアプリケーションのユーザ/管理者は、指定されたシステムおよび/または環境用のアプリケーションを起動するときに正しい設定を提供する責任があります。おそらく未知のデフォルト設定を使用しないでください。実際の設定を別の場所(別のバージョン管理リポジトリなど)にコードとは別に保存します。サンプル構成を配布することもできますが、文書を配布する方法はさらに豊富です。 – zloster

+0

それは正しいです。設定ファイルはビルドとは別に保存する必要があります。 – user2995358

答えて

0

あなたが瓶からそれを実行したとき

this.getClass().getResource("myresource.xml") 

はIDEで動作しませんが、ということは本当に不思議です。

this.getClass().getResourceAsStream("myresource.xml") 

は、IDEとjarの両方で動作します。

これは、リソースの問題を解決します。しかし、私はどのようにconfig.ymlファイルをパッケージ化するための答えが必要です。 jarファイルに加えて別に提供する必要がありますか?

+0

私のコメントを確認してください:http://stackoverflow.com/questions/42884004/how-to-package-config-yml-and-resources-in-project-0-0-1-snapshot-jar#comment72966041_42884004 – zloster

関連する問題