Как построить многомодульный проект Maven без основного класса в одном из модулей - PullRequest
0 голосов
/ 02 января 2019

Я пытался найти ответ на этот вопрос в похожих вопросах, но я до сих пор не знаю, что его вызывает.

У меня есть многомодульный проект maven, и я пытаюсьзапустить mvn install или mvn package, и я получаю следующую ошибку

Приложение [INFO] ................................................... УСПЕХ [1.025 с]

[ИНФО] модуль-данные ..................................... СБОЙ [0,952 с]

[ИНФО] модуль-приложение...................................... Пропущено

[ОШИБКА] Не удалось выполнитьgoal org.springframework.boot: spring-boot-maven-plugin: 2.1.1.RELEASE: переупаковка (переупаковка) для данных проекта проекта: переупаковка выполнения цели org.springframework.boot: spring-boot-maven-plugin: 2.1.1.RELEASE: сбой переупаковки: невозможно найти основной класс -> [Справка 1]

Модуль project-app имеет класс java в папке src, тогда как модуль project-data не имеетесть главный класс.

parent pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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>
    <packaging>pom</packaging>
    <modules>
        <module>project-data</module>
        <module>project-app</module>
    </modules>
    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.1.1.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>
    <groupId>com.example</groupId>
    <artifactId>app</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>app</name>
    <description></description>

    <properties>
        <java.version>1.8</java.version>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-jdbc</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>

        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>

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

</project>

project-data pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>app</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>project-data</artifactId>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>com.h2database</groupId>
            <artifactId>h2</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.postgresql</groupId>
            <artifactId>postgresql</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <goals>
                            <goal>repackage</goal>
                        </goals>
                        <configuration>
                            <skip>true</skip>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

project-app pom.xml

<?xml version="1.0" encoding="UTF-8"?>
<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">
    <parent>
        <artifactId>app</artifactId>
        <groupId>com.example</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>project-app</artifactId>

    <dependencies>
        <dependency>
            <artifactId>project-data</artifactId>
            <groupId>com.example</groupId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-actuator</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-thymeleaf</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-devtools</artifactId>
            <scope>runtime</scope>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
        </dependency>
    </dependencies>


</project>

У меня есть нечто очень похожее на структуру этого проекта (sfg-pet-clinic), однако,после загрузки и запуска mvn package работает нормально.Я не вижу большой разницы между файлами pom моего проекта и этим, так что я мог пропустить?

Ответы [ 5 ]

0 голосов
/ 22 марта 2019

Конфигурация для более старых версий пружины.

Удалить:

    <configuration>
       <skip>true</skip>
    </configuration>

Вместо этого добавить этот флаг ниже пом artifactId

   <properties>
        <spring-boot.repackage.skip>true</spring-boot.repackage.skip>
    </properties>

Примерно так:

 <parent>
        <artifactId>mc-pet-clinic</artifactId>
        <groupId>guru.springframework</groupId>
        <version>0.0.1-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>pet-clinic-data</artifactId>

    <properties>
        <spring-boot.repackage.skip>true</spring-boot.repackage.skip>
    </properties>

...
0 голосов
/ 02 февраля 2019

Я только что изменил версию Spring Boot в родительском pom.xml с 2.1.1 на 2.0.3, и она работает.

<parent>
    <groupId>org.springframework.boot</groupId>
    <artifactId>spring-boot-starter-parent</artifactId>
    <version>2.0.3.RELEASE</version>
    <relativePath /> <!-- lookup parent from repository -->
</parent>

Хотя было бы лучше, чтобы она работала в 2.1.1,но это быстрое и простое решение.

0 голосов
/ 02 января 2019

Спасибо @wemu в разделе комментариев.

Добавление этого:

<configuration>
    <mainClass> ${your.start.Class}</mainClass>
</configuration>

в раздел плагина требуется в версии 2.1.1. ВЫПУСК зависимости spring-boot-starter-parent, если ваш класс находится в другом модуле.

В проекте sfg-pet-clinic, о котором я говорил в моем вопросе, используется более старая версия, для которой не требуется конфигурация <mainClass>

0 голосов
/ 18 января 2019

Хорошо, вот как я это исправил.

Мои шаги были:

  1. Изменить упаковку файла pom.xml для данных проекта на pom from jar (я использовал обзор Eclipse)
  2. add <type>pom</type> в pom.xml файл для проекта-приложения для зависимости данных модуля
        <dependency>
            <groupId>samee.springframework</groupId>
            <artifactId>project-data</artifactId>
            <version>0.0.1-SNAPSHOT</version>
             <type>pom</type>
        </dependency>  

Затем вы можете запустить очистку и пакет / установку

0 голосов
/ 02 января 2019

Я бы переместил весь раздел

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

из родительского в модуль модуль-приложение, поскольку этот модуль является единственным модулем, который использует функции переупаковки.

Более того, я быудалите также раздел плагина из данных модуля, потому что нет необходимости переупаковывать этот модуль.

...