0

問題

ネストされた複数のモジュールがあります (正しい用語ですか?) Maven プロジェクトと、モジュールの 1 つの依存関係が jar にパッケージ化されていません。mvn clean package

このプロジェクトは、実際には私が書いていない別のもののフォークであり、どこかでビルドプロセスを中断しましたが、自分が何をしたかを知ることができないようです.

プロジェクトの構造は次のとおりです。

    • 分布 (親 = ルート)
    • child1 (親 = ルート) <-- この依存関係がパッケージ化されない
    • child2 (親 = ルート)

Poms は次のとおりです (すべてをここに投稿して申し訳ありませんが、どこを見ればよいかわかりません)。

<groupId>com.something</groupId>
<artifactId>root</artifactId>
<packaging>pom</packaging>

<modules>
    <module>child1</module>
    <module>child2</module>
    <module>distribution</module>
</modules>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
        </plugin>
    </plugins>
</build>

分布

<parent>
    <groupId>com.something</groupId>
    <artifactId>root</artifactId>
</parent>

<artifactId>distribution</artifactId>
<packaging>pom</packaging>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptors
                    <descriptor>src/main/assembly/distribution.xml</descriptor>
                </descriptors>
                <appendAssemblyId>false</appendAssemblyId>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

子1

<parent>
    <groupId>com.something</groupId>
    <artifactId>root</artifactId>
</parent>

<artifactId>child1</artifactId>
<packaging>jar</packaging>

<dependencies>
    many dependencies here...
</dependencies>

子2

<parent>
    <groupId>com.something</groupId>
    <artifactId>root</artifactId>
</parent>

<artifactId>child2</artifactId>
<packaging>jar</packaging>

<dependencies>
    many dependencies here...
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-assembly-plugin</artifactId>
            <configuration>
                <descriptorRefs>
                    <descriptorRef>jar-with-dependencies</descriptorRef>
                </descriptorRefs>
                <appendAssemblyId>false</appendAssemblyId>
            </configuration>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>single</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

配布.xml

<id>package</id>
<formats>
    <format>tar.gz</format>
</formats>
<includeBaseDirectory>true</includeBaseDirectory>
<fileSets>
    <fileSet>
        <directory>..</directory>
        <outputDirectory>.</outputDirectory>
        <fileMode>0644</fileMode>
        <includes>
            <include>README</include>
            <include>CHANGELOG</include>
            <include>LICENSE.txt</include>
            <include>NOTICE.txt</include>
        </includes>
    </fileSet>
    <fileSet>
        <directory>../bin</directory>
        <outputDirectory>bin</outputDirectory>
        <fileMode>0755</fileMode>
    </fileSet>
    <fileSet>
        <directory>../workloads</directory>
        <outputDirectory>workloads</outputDirectory>
        <fileMode>0644</fileMode>
    </fileSet>
</fileSets>
<moduleSets>
    <moduleSet>
        <useAllReactorProjects>true</useAllReactorProjects>
        <includeSubModules>true</includeSubModules>
        <sources>
            <includeModuleDirectory>true</includeModuleDirectory>

            <fileSets>
                <fileSet>
                    <directory>.</directory>
                    <fileMode>0644</fileMode>
                    <includes>
                        <include>README</include>
                    </includes>
                </fileSet>
                <fileSet>
                    <directory>src/main/conf</directory>
                    <outputDirectory>conf</outputDirectory>
                    <fileMode>0644</fileMode>
                </fileSet>
                <fileSet>
                    <outputDirectory>lib</outputDirectory>
                    <directory>target</directory>
                    <includes>
                        <include>*.jar</include>
                    </includes>
                    <fileMode>0644</fileMode>
                </fileSet>
            </fileSets>
        </sources>
    </moduleSet>
</moduleSets>

注: コードは github にあります。誰かが実際のプロジェクトを見る時間と欲求がある場合は、喜んでリポジトリへのリンクを提供します!

4

1 に答える 1

2

これは設計によるものだと思います。それはちょうどジャーが機能する方法です。jar に依存関係をパッケージ化する場合、それらはとにかく機能しません。解決策は、shade プラグインを使用して uberjar を作成することです。 ここに方法に関するチュートリアルがあります。

そのmaven-assembly-pluginプラグインでも実行できますが、それほど多くの機能はありません。いずれにせよ、それを child1 pom に追加すると、依存関係もパッケージ化されます。

于 2013-05-22T23:26:12.023 に答える