1

2.3.7META-INF/INDEX.LISTを使用して、インデックス()を持つバンドルを構築しようとしています。maven-bundle-plugin

私のプラグイン構成は次のようになります

  <plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
      <archive>
        <index>true</index>
      </archive>
      <instructions>
        <!-- other things like Import-Package -->
        <Include-Resource>{maven-resources}</Include-Resource>
      </instructions>
    </configuration>
  </plugin>

ただしMETA-INF/INDEX.LIST、JARには表示されません。使ってみました

  <Include-Resource>{maven-resources},META-INF/INDEX.LIST</Include-Resource>

しかし、それは失敗します

[ERROR] Bundle com.acme:project::bundle:1.0.0-SNAPSHOT : Input file does not exist: META-INF/INDEX.LIST
[ERROR] Error(s) found in bundle configuration

これは、Maven Archiverに含まれていMETA-INF/INDEX.LISTないが、動的に生成されるため、驚くことではありません。target/classes

編集1

jarパッケージングの代わりに使用するとbundle、インデックスが表示されます。

編集2

Maven3.0.4を使用しています

4

1 に答える 1

2

maven -bundle-pluginのソースコードを掘り下げてみたところ、現在のバージョン(2.3.7)はアーカイブ構成の属性を無視しているようです。indexまた、、、およびを無視compressforcedますpomPropertiesFile。注意を払うアーカイブ構成addMavenDescriptorの唯一manifestの属性は、、、、、、およびです。manifestEntriesmanifestFilemanifestSections

maven-bundle-pluginのみを使用して、作成されたアーカイブを操作する他の方法があるかどうかはわかりません。

考えられる回避策として、maven-jar-pluginを使用して、バンドルの作成後にバンドルを再jarし、jarプラグインにインデックスを作成するように指示できますが、バンドルプラグインによって作成されたマニフェストを使用できます。

<plugin>
    <groupId>org.apache.felix</groupId>
    <artifactId>maven-bundle-plugin</artifactId>
    <extensions>true</extensions>
    <configuration>
        <!-- unpack bundle to target/classes -->
        <!-- (true is the default, but setting it explicitly for clarity) -->
        <unpackBundle>true</unpackBundle>
        <instructions>
            <!-- ... your other instructions ... -->
            <Include-Resource>{maven-resources}</Include-Resource>
        </instructions>
    </configuration>
</plugin>
<!-- List this after maven-bundle-plugin so it gets executed second in the package phase -->
<plugin>
    <artifactId>maven-jar-plugin</artifactId>
    <executions>
        <execution>
            <phase>package</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <!-- overwrite jar created by bundle plugin -->
                <forceCreation>true</forceCreation>
                <archive>
                    <!-- use the manifest file created by the bundle plugin -->
                    <manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
                    <!-- bundle plugin already generated the maven descriptor -->
                    <addMavenDescriptor>false</addMavenDescriptor>
                    <!-- generate index -->
                    <index>true</index>
                </archive>
            </configuration>
        </execution>
    </executions>
</plugin>

バンドルアーカイブに必要なものについてはあまり詳しくないので、すべてが正しいことを再確認することをお勧めします。

于 2012-10-30T16:53:39.577 に答える