0

既存の質問を検索しようとしましたが、見つかりませんでした-私の質問は非常に単純なように感じますが、おそらくそれが非常に具体的であるため、どこにも答えを見つけることができません。

とにかく-私はMavenで2つのプロジェクトを持っており、2番目は最初のクラスに依存/必要です。場合によっては、プロジェクトの依存関係ではなく、JARに依存関係を持たせたいことがあります。

これを解決するには、maven-jar-pluginを使用して追加のjarを作成し、必要なクラスを含めました。jarは正しく作成され、${project.build.directory}に出力されました。しかし、プロジェクトAのpomは同じディレクトリにあります。つまり、私にとってもプロジェクトBにとっても、プロジェクトAで使用される依存関係の原因です($ {projectにあるpomを無視する方法はありますか?)。 build.directory} ??? like:

<dependency>
            <groupId>projectA.groupId</groupId>
            <artifactId>A</artifactId>
            <version>1x-SNAPSHOT</version>
            <classifier>classes</classifier>
                    ->  <ignorePom>true</ignorePom>
        </dependency>

)。

現在、依存関係にシステムスコープを使用しており、システムパスを追加した後は正常に機能しています。スコープシステムは可能な限り避ける必要がありますが。これは良い習慣ではなく、絶対的なパスのために、Systempathは私を苛立たせます。

作成したjarを使用してリポジトリにインストールできることを知っています

mvn install:install -file

しかし、私はこのプロセスを可能な限り自動化したいのですが、あなたは何を提案しますか?

前もって感謝します

4

3 に答える 3

1

最善の解決策は、リポジトリマネージャーを使用して、最初のjarの実際のリリースを実行し、必要な場所に実際の依存関係を作成することです。

あなたが書いたことに基づいて、他のいくつかのモジュールで使用されるクラスを含む別のMavenプロジェクトを作成してリリースし、そのモジュールへの依存関係を使用することをお勧めします。これで問題は完全に解決します。

于 2012-05-23T14:48:34.933 に答える
0

Mavenは「jarへの依存」をサポートしていません。「システム」スコープがありますが、それは非常に限られており、あらゆる種類の問題を引き起こす可能性があります。Jarに依存する必要がある場合は、Jarに一意のgroupIdとartifactIdを割り当てる必要があります。Mavenでビルドしたくない場合は、ローカルリポジトリマネージャー(またはmvn install:install-fileを使用してローカルリポジトリ)にデプロイできます。

分類子が「機能する」jarに依存しますが、reactorがそれらをマルチモジュールプロジェクトに適切に含めることができないため、あまりうまくいきません。

于 2012-05-23T14:15:06.577 に答える
0

Mavenに関するドキュメントを読んだことがありますか?Mavenを使用してプロジェクトを定義している場合は、依存関係を機能させるために特別なことをする必要はありません。

ニーズに応じて、2つの選択肢があります。一方が他方に依存する2つの別個のプロジェクトを作成するか、一方のモジュールが他方に依存するマルチモジュールプロジェクトを作成できます。

2つの別々のプロジェクト

.
 |-- A
 |   `-- pom.xml
 |   `-- src
 |       `-- main
 |           `-- java
 `-- B
     `-- pom.xml
     `-- src
         `-- main
             `-- java

A/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0  http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>A</artifactId>
    <version>1.0-SNAPSHOT</version>
</project>

B/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>B</artifactId>
    <version>2.0-SNAPSHOT</version>

    <dependencies>
        <dependency>
            <groupId>com.company</groupId>
            <artifactId>A</artifactId>
            <version>1.0-SNAPSHOT</version>
        </dependency>
    </dependencies>
</project>

それでおしまい!Bのプロジェクト/モジュールAに依存しています。

最初にプロジェクトAをビルドするには、発行しますmvn install(そしてディレクトリAにあります)。アーティファクトはローカルリポジトリにインストールされます(そして他のプロジェクトで利用できます)。

次に、発行してmvn install(そしてディレクトリBにいる)プロジェクトBをビルドします。アーティファクトはローカルリポジトリにインストールされます。

サブモジュールを持つ1つの親プロジェクト

.
 |-- A
 |   `-- pom.xml
 |   `-- src
 |       `-- main
 |           `-- java
 `-- B
 |   `-- pom.xml
 |   `-- src
 |       `-- main
 |           `-- java
 `-- pom.xml

pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <groupId>com.company</groupId>
    <artifactId>parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>

    <modules>
        <module>A</module>
        <module>B</module>
    </modules>

    <dependencyManagement>
        <dependencies>
            <dependency>
                <groupId>com.company</groupId>
                <artifactId>A</artifactId>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
    </dependencyManagement>

</project>

<depencdencyManagement/>サブモジュールが正しいバージョンを選択するのに役立つものがあります。

A/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.company</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.company</groupId>
    <artifactId>A</artifactId>

</project>

B/pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>com.company</groupId>
        <artifactId>parent</artifactId>
        <version>1.0-SNAPSHOT</version>
    </parent>

    <groupId>com.company</groupId>
    <artifactId>B</artifactId>

    <dependencies>
        <dependency>
            <groupId>com.company</groupId>
            <artifactId>A</artifactId>
        </dependency>
    </dependencies>
</project>

このソリューションでは、親フォルダーに自分を配置して実行するだけですmvn installmvn packageなど)。これで、AとBの両方を正しい順序でビルドし、このプロジェクト全体をEclipseにインポートできます。

于 2012-06-05T08:52:45.340 に答える