web-dev-qa-db-ja.com

Maven:パブリックリポジトリに見つからないjarを含む

Mavenパブリックリポジトリにないサードパーティライブラリを使用する場合、他の誰かが私のコードをチェックアウトしてもビルドできるように、プロジェクトの依存関係としてそれを含める最良の方法は何ですか?

つまり.

マイアプリケーション「A」は、パブリックリポジトリに存在しないjar「B」に依存しています。しかし、私は「B」を依存関係として「A」に追加して、世界の反対側にいる人がコードをチェックアウトしても「A」をビルドできるようにしたい

61
digiarnie

プロジェクトは自分でインストールできます。

または、次のようにsystemスコープを使用できます。

<dependency>
    <groupId>org.group.project</groupId>
    <artifactId>Project</artifactId>
    <version>1.0.0</version>
    <scope>system</scope>
    <systemPath>${basedir}/lib/project-1.0.0.jar</systemPath>
</dependency>

systemPathには、プロジェクトの絶対パスが必要です。簡単にするために、jarファイルがリポジトリ/プロジェクト内にある場合、${basedir}プロパティ。プロジェクトのルートにバインドされています。

60
notnoop

この状況にあるモジュールを含む親プロジェクトがある場合(リポジトリにない依存関係が必要)、exec-maven-pluginプラグインを使用して依存ファイルを自動インストールするように親プロジェクトをセットアップできます。たとえば、authorize.net jarファイルは公開されていないため、これを行う必要がありました。

親POM:

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.2.1</version>
            <inherited>false</inherited>
            <executions>
                <execution>
                    <id>install-anet</id>
                    <phase>validate</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                </execution>
            </executions>
            <configuration>
                <executable>mvn</executable>
                <arguments>
                    <argument>install:install-file</argument>
                    <argument>-Dfile=service/lib/anet-Java-sdk-1.4.6.jar</argument>
                    <argument>-DgroupId=net.authorize</argument>
                    <argument>-DartifactId=anet-Java-sdk</argument>
                    <argument>-Dversion=1.4.6</argument>
                    <argument>-Dpackaging=jar</argument>
                </arguments>
            </configuration>
        </plugin>
    </plugins>
</build>

上記の例では、jarの場所は「service」モジュールのlibフォルダーにあります。

サービスモジュールが検証フェーズに入るまでに、jarはローカルリポジトリで利用可能になります。親pomでgroupid、artifactなどを設定する方法で単純に参照します。例えば:

<dependency>
    <groupId>net.authorize</groupId>
    <artifactId>anet-Java-sdk</artifactId>
    <version>1.4.6</version>
</dependency>
16
Domenic D.

システムスコープを使用しても機能する場合がありますが、Maven仕様でも推奨されません。ポータブルではありません。

mavenの本から:

system-システムスコープは、ローカルファイルシステム上のJARへの明示的なパスを提供する必要があることを除いて、提供されるものに似ています。これは、システムライブラリの一部である可能性があるネイティブオブジェクトに対するコンパイルを可能にすることを目的としています。アーティファクトは常に利用可能であると想定されており、リポジトリでは検索されません。スコープをシステムとして宣言する場合は、systemPath要素も提供する必要があります。このスコープは推奨されないことに注意してください(パブリックまたはカスタムMavenリポジトリーで依存関係を常に参照するようにしてください)。

最善のアプローチは、すべてのピアがアクセスできるようにローカルリポジトリまたはエンタープライズリポジトリにインストールすることです。

nexusなどのリポジトリマネージャーを使用している場合、これは非常に簡単です。

15
rperez

一般的に、最初にサードパーティのjarをローカルリポジトリに配置する必要があります。その後、pom.xmlに依存関係を追加して使用できます。

例えば。

1.最初にローカルリポジトリにjarを入れます:

mvn install:install-file -Dfile=<path-to-file>

注:このコマンドには、maven-install-pluginバージョン2.5以降が必要です。そうでない場合は、 ここ を参照できます

2.依存関係をプロジェクトのpom.xmlに追加して、jarを使用します。
これをプロジェクトのpom.xmlに追加するだけです:

<dependency>
  <groupId>${the groupId in the jar's pom.xml}</groupId>
  <artifactId>${the artifactId in the jar's pom.xml}</artifactId>
  <version>${the version in the jar's pom.xml}</version>
</dependency>

3. mvn packageまたはmvn deployを実行して、プロジェクトをパッケージ化またはデプロイできます

サードパーティのjarもパッケージに含まれます。

1
Chen Zhu

Groovy/grailツールスイート([〜#〜] ggts [〜#〜])を使用している場合は、サードパーティの依存関係を直接インポートできます(ただし、サードパーティの依存関係がローカルリポジトリ)以下の手順を使用:

  1. プロジェクトエクスプローラーに移動し、プロジェクトを右クリックします。
  2. importオプションをクリックします。
  3. mavenオプションを使い、mavenリポジトリへのアーティファクトのインストールまたはデプロイを選択して、次へをクリックします。
  4. アーティファクトファイルオプションを使用してサードパーティの依存関係を参照および選択し、POM.xmlファイルを使用してグループID、アーティファクトIDおよびバージョンの詳細を入力し、 完了をクリックします

しばらく待ってください。おそらく、その問題がエラーになっているでしょう。