3

最終的にJavaアプリをDebianパッケージにパッケージ化する最初のMavenプロジェクトに取り組んでいます(jdebプラグインを使用)。アセンブリ プラグインを使用して tar ファイルを作成しようとしていますが、生成されたファイルに必ずしもディレクトリ エントリが含まれていないようで、dpkg のインストールが失敗します。

誰もこれを見たことがありますか?

具体的には、生成された tar ファイルには、次のディレクトリ エントリは含まれません。

  • 指定する fileSet <includes>(そのまま<includes>にしておくと、tar ファイル内のディレクトリ エントリになります)
  • 依存関係セット

を使用しないアセンブリ ファイルを次に示します。<includes>

<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>simple</id>
<formats>
    <format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>

<moduleSets>
</moduleSets>
<fileSets>
    <fileSet>
        <directory>src/main/config</directory>
        <outputDirectory>/etc/${project.artifactId}</outputDirectory>

    </fileSet>
</fileSets>

<dependencySets>

    <dependencySet>
        <outputDirectory>/usr/lib/${project.artifactId}/lib</outputDirectory>
        <scope>runtime</scope>
        <useProjectArtifact>true</useProjectArtifact>
    </dependencySet>

</dependencySets>
<repositories>
</repositories>
<componentDescriptors />
</assembly>

tar ファイルの内容は次のとおりです。

 tar tvf assembly-test-0.0.1-SNAPSHOT-simple.tar
drwxr-xr-x 0/0               0 2012-04-10 12:54 etc/assembly-test/
-rw-r--r-- 0/0               0 2012-04-10 12:52 etc/assembly-test/file1.xml
-rw-r--r-- 0/0               0 2012-04-10 12:52 etc/assembly-test/file2.xml
-rw-r--r-- 0/0            2131 2012-04-10 13:26 usr/lib/assembly-test/lib/assembly-test-0.0.1-SNAPSHOT.jar

ここで、いくつかのインクルード パターンを含むアセンブリを使用すると、次のようになります。

<assembly
xmlns="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/plugins/maven-assembly-plugin/assembly/1.1.2 http://maven.apache.org/xsd/assembly-1.1.2.xsd">
<id>include-match</id>
<formats>
    <format>tar</format>
</formats>
<includeBaseDirectory>false</includeBaseDirectory>

<moduleSets>
</moduleSets>
<fileSets>
    <fileSet>
        <directory>src/main/config</directory>
        <outputDirectory>/etc/${project.artifactId}</outputDirectory>
        <includes>
            <include>*.xml</include>
        </includes>
    </fileSet>
</fileSets>

<dependencySets>

    <dependencySet>
        <outputDirectory>/usr/lib/${project.artifactId}/lib</outputDirectory>
        <scope>runtime</scope>
        <useProjectArtifact>true</useProjectArtifact>
    </dependencySet>

</dependencySets>
<repositories>
</repositories>
<componentDescriptors />
</assembly>

tar ファイルの内容からディレクトリ エントリが失われます。

tar tvf assembly-test-0.0.1-SNAPSHOT-include-match.tar
-rw-r--r-- 0/0               0 2012-04-10 12:52 etc/assembly-test/file1.xml
-rw-r--r-- 0/0               0 2012-04-10 12:52 etc/assembly-test/file2.xml
-rw-r--r-- 0/0            2131 2012-04-10 13:26 usr/lib/assembly-test/lib/assembly-test-0.0.1-SNAPSHOT.jar

これはアセンブリ プラグインのバグのようですが、まだ実験中です。私は確かにそれを回避することができます (パッケージ内の preinst スクリプトを使用するか、おそらく jdeb を構築するためのディレクトリ構造を構築します) が、できるだけ記述子ファイルに保存したいと思います。

4

2 に答える 2

0

tarファイルにディレクトリエントリを強制的に作成できる方法でこれに答えることができると思います(実際にはこれを他の場所で見つけましたが、どこにあるか覚えていません)-次のようなすべてのコンテンツを除外しながらfileSetを追加します。

        <!-- force entry for /usr/lib/${project.artifactId} -->
        <fileSet>
            <directory></directory>
            <outputDirectory>/usr/lib/${project.artifactId}</outputDirectory>
            <excludes>
                <exclude>*/**</exclude>
            </excludes>
        </fileSet>

エレガントではなく、ディレクトリがたくさんあると冗長になりますが、機能します。ただし、debian パッケージを作成するという私の特定のケースでは、代わりに Assembly プラグインを使用して「ディレクトリ」形式のアセンブリを構築し、jdeb プラグインにディレクトリ構造を使用させ (ファイルモードを設定)、少し最終的には全体的にシンプルに。

于 2012-04-12T23:30:08.980 に答える