LoginSignup
3
2

More than 5 years have passed since last update.

Mavenのdependencyに、p2リポジトリにあるjarを加える

Last updated at Posted at 2016-06-28

前提

Eclipse/Tycho を使うと、にlayout=p2を指定でき、p2リポジトリの中にある OSGi bundles を Maven 内で使える。

Xtext でのコード生成には MWE2 が用いられており、Maven を用いたビルドでは exec-maven-plugin 経由で OSGi とは無関係な Java アプリケーションとして実行される。

Xtext の高度な利用では、サードパーティが作成した EMF モデル/バンドルを使う場合がある。

環境は mvn: 3.0.5、Tycho: 0.23.1、Xtext: 2.9.2

課題

exec-maven-plugin の dependency に P2 リポジトリ内にある OSGi bundle を加えたい。

検討

OSGi には、Maven での artifactId に相当する Bundle-SymbolicName は存在する。しかし、groupId の概念は無い。

試しに mvn dependency:tree を実行してみる。

[INFO] +- p2.eclipse-plugin:org.eclipse.sphinx.emf:jar:0.8.1.201409171422:system

なるほど、p2.eclipse-plugin が groupId か?

<!-- snip -->
    <plugin>
      <artifactId>exec-maven-plugin</artifactid>
<!-- snip --->
        <dependencies>
          <dependency>
            <groupId>p2.eclipse-plugin</groupId> <!-- bingo? -->
            <artifactId>org.artop.aal.autosar421</artifactId>
            <version>4.4.1.201503251636</version>
          </dependency>
        </dependencies>
<!-- snip -->

でも、これは誤り。

正解

~/.m2/repository を見ると、取得した p2/osgi/bundle というディレクトリがある。
(p2/eclipse-plugin というディレクトリは無い)

そこで…

<!-- snip -->
    <plugin>
      <artifactId>exec-maven-plugin</artifactid>
<!-- snip --->
        <dependencies>
          <dependency>
            <groupId>p2.osgi.bundle</groupId> <!-- Bingo! -->
            <artifactId>org.artop.aal.autosar421</artifactId>
            <version>4.4.1.201503251636</version>
          </dependency>
        </dependencies>
<!-- snip -->

が、正解、っぽい。

注意

このような dependency の記述では、OSGi bundle は単に jar ファイルとして解釈されているようだ。MANIFEST.MF にある記述を用いた依存性解決はしてくれないようなので、地味に頑張るしか無い、っぽい。

p2 リポジトリには -SNAPSHOT の概念は無い。よって、バージョンの qualifirer は厳密に指定する必要がある。

別段の指定がない場合、 groupId として p2 osgi.bundle を指定しても、ローカルの m2 リポジトリに groupId 付きの m2 artifacts がある場合には、そちらを優先して参照しに行く。(これ、なんとなく仕様のバグではないかという気もするけれども…)

3
2
0

Register as a new user and use Qiita more conveniently

  1. You get articles that match your needs
  2. You can efficiently read back useful information
  3. You can use dark theme
What you can do with signing up
3
2