2016-05-24 3 views
1

私はmaven-bundle-pluginbndを効果的に使っています)。bnd/maven-bundle-pluginのjar依存関係からosgiバンドルにリソースファイルを含めるにはどうすればいいですか?

ソースからのリソースファイルを含めるのは簡単です。

たとえば、リソースファイル(src/main/resources/some.xml)はビルド時にtargetディレクトリ(target/classes/some.xml)の下に移動され、<Include-Resource>命令を使用して、バンドルに含めることができます。

<plugin> 
    <groupId>org.apache.felix</groupId> 
    <artifactId>maven-bundle-plugin</artifactId> 
    <version>3.0.1</version> 
    <extensions>true</extensions> 
    <configuration> 
     <instructions> 
      <Include-Resource> 
       some.xml=target/classes/some.xml, 
      </Include-Resource> 
     </instructions> 
    </configuration> 
</plugin> 

は、私たちは、依存関係を持ってみましょう:

<dependency> 
    <groupId>com.example</groupId> 
    <artifactId>library</artifactId> 
    <version>1.0.0</version> 
</dependency> 

リソースファイルを参照する方法はありますか。これに代えて

com.example:library:1.0.0:jar/some.xml 
  • target/classes/some.xml 
    
  • ので、1からそのリソース

    • はこのような何かを指定するには、どのように言い換えれば

      、の出力バンドルjarに依存関係がありますか?

    +0

    質問が分かりません。実行時にバンドル内のコードからsome.xmlを参照する方法を尋ねていますか? –

    +0

    私はちょうど 'jar'を別の(依存関係)' jar'の中から取った 'some.xml'でパッケージ化したいと思っています。最終的に、これはコードによって参照されますが、コードで参照できるようになる前に、出力 'jar'にパッケージ化する必要があります。 – uvsmtid

    答えて

    1

    maven-depencency-pluginを使用すると、dependencie jarを解凍して、そのリソースをjarファイルに含めることができます。

    <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</goal> 
          </goals> 
          <configuration> 
           <markersDirectory>${project.build.directory}/dependencies/dependency-maven-plugin-markers</markersDirectory> 
           <artifactItems> 
            <artifactItem> 
             <groupId>DEPENDENCY_GROUPID</groupId> 
             <artifactId>DEPENDENCY_ARTIFACTID</artifactId> 
             <type>OPTIONAL_DEPENCENCY_TYPE</type> 
             <outputDirectory>${project.build.directory}/dependencies/DEPENDENCY_ARTIFACTID</outputDirectory> 
            </artifactItem> 
           </artifactItems> 
          </configuration> 
         </execution> 
        </executions> 
    </plugin> 
    ... 
    <plugin> 
        <groupId>org.apache.felix</groupId> 
        <artifactId>maven-bundle-plugin</artifactId> 
        <configuration> 
         ... 
         <instructions> 
          ... 
          <Include-Resource>target/dependencies/DEPENDENCY_ARTIFACTID/some.xml</Bundle-Activator> 
         </instructions> 
        </configuration> 
    </plugin> 
    

    Include-Resource命令がInclude-Resourceを参照して、POM相対することになっている、あなたはおそらく${project.build.directory}targetを置き換えることができます。

    +0

    正直なところ、私は 'maven-bundle-plugin' /' bnd'からパッケージを使って指定された 'Private-Package'命令のときにプラグインと同様に出力バンドル' jar'に移されるリソースを選択するトリックがあると思いましたこれらのパッケージは出力バンドル 'jar'の一部になります)。しかし、この答えは簡単で、 'maven-bundle-plugin'の洗練さからいくつかの責任を断つことによって回避されます。 – uvsmtid

    2

    あなたはjarファイルへのファイルの参照を持っている場合、あなたはあなたは、リソースがジャージャーのURLから!/構文であると言って@接頭辞を使用し

    -includeresource: @path/to/file.jar!/some.xml

    行うことができます。

    私が疑うプロジェクトの依存関係から、厄介な部分がjarへのパスを取得します。

    +0

    確かに。 Maven依存関係としてリストされている 'jar'ファイルのコピーを確実に参照する方法がわかりません。だから、 'maven-dependency-plugin'の答えは受け入れられ、今は問題を修正しました。しかし、私はあなたの情報を必要とするかもしれません - アップボーニング。ありがとう! – uvsmtid

    +0

    詳細については、(文書化されていないと思われる) 'repo'マクロを使用してjarへのパスを得ることができます。例: ' -includeresource:@ $ {repo; org.apache.felix.http; latest}!/ META -INF/LICENSE' これは、リポジトリがまだ定義されていないので、このようなことをすることもできます(しかし、cnfプロジェクトではまだ定義されていません): '-include:jar:$ {fileuri; $ {repo; bsn;バージョン}}!/ resource.properties' –

    +0

    この質問はmavenビルドに関するものです。したがって、それらはbndワークスペースではありません。したがって、repoマクロが何らかの目的で使用されるようにreposが設定されることはありません。 –

    関連する問題