6

基本的に、私は次のようなマルチモジュールプロジェクトを持っています

- ProjectA
  |- Module1
  |- Module2

関連する部分(私は信じています)pom.xmlは次のProjectAとおりです。

<modelVersion>4.0.0</modelVersion>
<groupId>com.companyName</groupId>
<artifactId>ProjectA</artifactId>
<packaging>pom</packaging>
<version>0.0.1-SNAPSHOT</version>

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>1.4.1.RELEASE</version>
</parent>

<modules>
    <module>Module1</module>
    <module>Module2</module>
</modules>

Module1pom.xmlの場合は次のとおりです。

<parent>
    <groupId>com.companyName</groupId>
    <artifactId>ProjectA</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>

<modelVersion>4.0.0</modelVersion>
<artifactId>Module1</artifactId>
<packaging>jar</packaging>
<version>0.0.1-SNAPSHOT</version>

また、pom.xmlModule1 に依存する Module2 の は次のとおりです。

<parent>
    <groupId>com.companyName</groupId>
    <artifactId>ProjectA</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>
<artifactId>Module2</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>jar</packaging>
<dependencies>
    <dependency>
        <groupId>com.companyName</groupId>
        <artifactId>Module1</artifactId>
        <version>0.0.1-SNAPSHOT</version>
    </dependency>
    ...
</dependencies>

Module1 を問題なくビルドしてインストールできます。そこから Module2 にクラスをインポートできますが、Module2 を次のようにコンパイルすることはできません。Could not find artifact com.companyName:ProjectA:pom:0.0.1-SNAPSHOT

同様に、Module3 を持つ ProjectB という別のプロジェクトを作成しています。Module3 でpom.xml:

<dependency>
    <groupId>com.companyName.ProjectA</groupId>
    <artifactId>Module1</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</dependency>

しかし、com.companyName.ProjectA が利用できないため、.java ファイルにインポートできません。IntelliJ から警告が表示されます。私は何を間違っていますか?関連するマルチモジュール プロジェクトの質問で、ほぼすべての構成を試しました。ありがとう!

更新: コンソール出力は次のように変更されました。

[ERROR] COMPILATION ERROR : 
[INFO] -------------------------------------------------------------
[ERROR] /Users/user/workspace/project-name/Module2/src/main/java/com/companyName/ProjectA/Module2/users/UsersDAO.java:[3,39] package com.companyName.ProjectA.Module1 does not exist
[ERROR] /Users/user/workspace/project-name/Module2/src/main/java/com/companyName/ProjectA/Module2/users/UsersDAO.java:[9,6] cannot find symbol...

更新: 興味深いことに、削除:

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
        </plugin>
    </plugins>
</build>

from parent project ( ProjectA) は、プロジェクトを再びビルド可能にします。しかし、私はそれが必要です (明らかな理由から) これに対する回避策はありますか? ありがとう!

4

1 に答える 1

8

両方 (またはすべて) のプロジェクトは Spring Boot プロジェクトです。これは通常の jar ではなく、構造が異なる実行可能 jar です。Spring Boot jar を別の Spring Boot jar に含めないでください。

これに対処する方法は、リファレンス ガイドのセクションで説明されています。

基本的に、 Module1の 2 つの成果物を明示的に構成する必要があります。

<build>
    <plugins>
        <plugin>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-maven-plugin</artifactId>
            <configuration>
                <classifier>exec</classifier>
            </configuration>
        </plugin>
    </plugins>
</build>

または、Module1が実行可能アプリケーションではなく、単なるライブラリである場合は、そのために Spring Boot Maven プラグインを使用しないでください。

于 2016-12-13T14:22:20.540 に答える