2

私たちは新しいプロジェクトの友人を持っており、彼の環境にプロジェクトをインストールしたいと考えています。しかし、Mavenリポジトリに存在しない依存関係が多すぎます。そのため、Mavenは役に立たなくなりました。アーティファクトをインストールするためにarchivaサーバーをインストールしましたが、すべての依存関係を1つずつデプロイしたくありません(プロジェクトjar自体だけでなく、すべての依存関係)。この状況に対する自動化されたソリューションはありますか?

前もって感謝します。

4

1 に答える 1

4

最初に、プロジェクトpom.xmlを微調整して、以下を追加した場合:

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-dependency-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>copy-dependencies</goal>
                    </goals>
                    <configuration>
                        <outputDirectory>localrepo</outputDirectory>
                        <useRepositoryLayout>true</useRepositoryLayout>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

mvn packageを実行すると、 localrepoディレクトリ内にリポジトリディレクトリ形式で依存関係のコピーが作成されます( dependency:copy-dependenciesのコマンドラインオプションを使用してみましたが、機能しませんでした)。おそらくもう必要ないので、 pom.xmlから上記をコメントアウトしてください。

Archivaを使用したことはありませんが、この時点で、localrepoリポジトリファイルをローカルWebサーバーにインストールし、それをミラーリングするようにArchivaサーバーを構成できると思います。

または、エンドユーザー向けに最小限の労力でインストールを作成したい場合(およびディストリビューションのサイズは問題ではありませんでした)、このlocalrepoディレクトリをディストリビューションに含め、pomに以下を追加してmavenにそのディレクトリへの参照を提供できます。 xml

<repositories>
    <repository>
        <id>local-repo</id>
        <name>local-repo</name>
        <url>file://${basedir}/localrepo</url>
        <releases>
            <enabled>true</enabled>
            <checksumPolicy>ignore</checksumPolicy>
            <updatePolicy>always</updatePolicy>
        </releases>
    </repository>
</repositories>  

このローカルリポジトリ手法は、パブリックMavenリポジトリにない自家製およびサードパーティのjarファイルを配布する場合に非常に役立ちます。パブリックリポジトリにあるライブラリはいつでも削除できます。

サードパーティのjarをインストールするために通常必要なmvninstall :install-file palaverをすべて説明しようとするよりも、Mavenの新規ユーザーを思いとどまらせるものは何もありません(ただし、Mavenについては熱心かもしれません)。

于 2011-09-08T10:03:18.013 に答える