2017-01-19 12 views
2

У меня есть мульти проект модуля: Родительский pom.xml:пакета зависимостей Multi-модуль Maven не найден

<?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> 

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

    <groupId>be.bodyreset</groupId> 
    <artifactId>bodyreset-parent</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>pom</packaging> 

    <name>Bodyreset Parent</name> 
    <description>Manages the common properties and dependencies for the child modules</description> 

    <modules> 
     <module>bodyreset-commons</module> 
     <module>messaging-contract</module> 
     <module>discovery-microservice</module> 
     <module>api-gateway-microservice</module> 
     <module>rest-client-microservice</module> 
     <module>email-commons</module> 
     <module>security-microservice</module> 
     <module>user-microservice</module> 
     <module>point-of-service-microservice</module> 
    </modules> 

    <properties> 
     <docker.image.prefix>bodyreset</docker.image.prefix> 
     <java.version>1.8</java.version> 
     <powermock.version>1.6.6</powermock.version> 
    </properties> 

    <dependencyManagement> 
     <dependencies> 
      ... 
     </dependencies> 
    </dependencyManagement> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>com.spotify</groupId> 
        <artifactId>docker-maven-plugin</artifactId> 
        <version>0.4.11</version> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-compiler-plugin</artifactId> 
        <version>3.6.0</version> 
        <configuration> 
         <source>${java.version}</source> 
         <target>${java.version}</target> 
        </configuration> 
       </plugin> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-jar-plugin</artifactId> 
        <version>3.0.2</version> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
    </build> 
</project> 

pom.xml из остального-клиента-microservice выглядит следующим образом:

<?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> 

    <parent> 
     <groupId>be.bodyreset</groupId> 
     <artifactId>bodyreset-parent</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>rest-client-microservice</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>Rest Client Microservice</name> 
    <description>Manages the REST clients to use for inter-service communication</description> 

    <dependencies> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.projectlombok</groupId> 
      <artifactId>lombok</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-web</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-hateoas</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-starter-eureka</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-starter-feign</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.cloud</groupId> 
      <artifactId>spring-cloud-starter-hystrix</artifactId> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>com.spotify</groupId> 
       <artifactId>docker-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <phase>package</phase> 
         <goals> 
          <goal>build</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <imageName>${docker.image.prefix}/${project.artifactId}</imageName> 
        <dockerDirectory>${project.basedir}/src/main/docker</dockerDirectory> 
        <resources> 
         <resource> 
          <targetPath>/</targetPath> 
          <directory>${project.build.directory}</directory> 
          <include>${project.build.finalName}.jar</include> 
         </resource> 
        </resources> 
       </configuration> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>test-jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <groupId>org.springframework.boot</groupId> 
       <artifactId>spring-boot-maven-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>repackage</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

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> 

    <parent> 
     <groupId>be.bodyreset</groupId> 
     <artifactId>bodyreset-parent</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </parent> 

    <artifactId>email-commons</artifactId> 
    <version>1.0.0-SNAPSHOT</version> 
    <packaging>jar</packaging> 

    <name>Email Commons</name> 
    <description>Enables sending emails via SMPT</description> 

    <dependencies> 
     <dependency> 
      <groupId>be.bodyreset</groupId> 
      <artifactId>rest-client-microservice</artifactId> 
      <version>1.0.0-SNAPSHOT</version> 
     </dependency> 
     <dependency> 
      <groupId>be.bodyreset</groupId> 
      <artifactId>rest-client-microservice</artifactId> 
      <version>1.0.0-SNAPSHOT</version> 
      <type>test-jar</type> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-lang3</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.projectlombok</groupId> 
      <artifactId>lombok</artifactId> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-api-mockito</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.powermock</groupId> 
      <artifactId>powermock-module-junit4</artifactId> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-starter-mail</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-test</artifactId> 
      <scope>test</scope> 
     </dependency> 
    </dependencies> 

    <build> 
     <plugins> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-jar-plugin</artifactId> 
       <executions> 
        <execution> 
         <goals> 
          <goal>test-jar</goal> 
         </goals> 
        </execution> 
       </executions> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

Если я пытаюсь выполнить maven clean install на родительском проекте, я получаю следующий результат:

[INFO] ------------------------------------------------------------------------ 
[INFO] Building Email Commons 1.0.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-clean-plugin:2.6.1:clean (default-clean) @ email-commons --- 
[INFO] Deleting /home/developer/ideaProjects/bodyreset/email-commons/target 
[INFO] 
[INFO] --- maven-resources-plugin:2.6:resources (default-resources) @ email-commons --- 
[INFO] Using 'UTF-8' encoding to copy filtered resources. 
[INFO] Copying 0 resource 
[INFO] Copying 2 resources 
[INFO] 
[INFO] --- maven-compiler-plugin:3.6.0:compile (default-compile) @ email-commons --- 
[INFO] Changes detected - recompiling the module! 
[INFO] Compiling 17 source files to /home/developer/ideaProjects/bodyreset/email-commons/target/classes 
[INFO] ------------------------------------------------------------- 
[ERROR] COMPILATION ERROR : 
[INFO] ------------------------------------------------------------- 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/converter/UserDTOToRecipientConverter.java:[4,29] package be.bodyreset.rest.dto does not exist 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/converter/UserDTOToRecipientConverter.java:[16,63] cannot find symbol 
    symbol: class UserDTO 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/converter/UserDTOToRecipientConverter.java:[22,30] cannot find symbol 
    symbol: class UserDTO 
    location: class be.bodyreset.mail.converter.UserDTOToRecipientConverter 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/converter/UserDTOToSenderConverter.java:[4,29] package be.bodyreset.rest.dto does not exist 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/converter/UserDTOToSenderConverter.java:[5,29] package be.bodyreset.rest.dto does not exist 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/converter/UserDTOToSenderConverter.java:[15,60] cannot find symbol 
    symbol: class UserDTO 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/converter/UserDTOToSenderConverter.java:[21,27] cannot find symbol 
    symbol: class UserDTO 
    location: class be.bodyreset.mail.converter.UserDTOToSenderConverter 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/SenderServiceImpl.java:[7,32] package be.bodyreset.rest.client does not exist 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/SenderServiceImpl.java:[8,32] package be.bodyreset.rest.client does not exist 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/SenderServiceImpl.java:[9,29] package be.bodyreset.rest.dto does not exist 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/SenderServiceImpl.java:[10,29] package be.bodyreset.rest.dto does not exist 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/SenderServiceImpl.java:[34,13] cannot find symbol 
    symbol: class PointOfServiceClient 
    location: class be.bodyreset.mail.service.impl.SenderServiceImpl 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/SenderServiceImpl.java:[37,13] cannot find symbol 
    symbol: class UserClient 
    location: class be.bodyreset.mail.service.impl.SenderServiceImpl 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/SenderServiceImpl.java:[63,13] cannot find symbol 
    symbol: class PointOfServiceDTO 
    location: class be.bodyreset.mail.service.impl.SenderServiceImpl 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/RecipientServiceImpl.java:[7,32] package be.bodyreset.rest.client does not exist 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/RecipientServiceImpl.java:[8,29] package be.bodyreset.rest.dto does not exist 
[ERROR] /home/developer/ideaProjects/bodyreset/email-commons/src/main/java/be/bodyreset/mail/service/impl/RecipientServiceImpl.java:[32,13] cannot find symbol 
    symbol: class UserClient 
    location: class be.bodyreset.mail.service.impl.RecipientServiceImpl 
[INFO] 17 errors 
[INFO] ------------------------------------------------------------- 
[INFO] ------------------------------------------------------------------------ 
[INFO] Reactor Summary: 
[INFO] 
[INFO] Bodyreset Parent .................................. SUCCESS [0.690s] 
[INFO] Bodyreset Commons ................................. SUCCESS [7.444s] 
[INFO] Messaging Contract ................................ SUCCESS [1.751s] 
[INFO] Discovery Microservice ............................ SUCCESS [19.925s] 
[INFO] API Gateway Microservice .......................... SUCCESS [17.272s] 
[INFO] Rest Client Microservice .......................... SUCCESS [15.271s] 
[INFO] Email Commons ..................................... FAILURE [1.026s] 
[INFO] Security Microservice ............................. SKIPPED 
[INFO] User Microservice ................................. SKIPPED 
[INFO] Point Of Service Microservice ..................... SKIPPED 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD FAILURE 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 1:04.292s 
[INFO] Finished at: Thu Jan 19 11:53:25 CET 2017 
[INFO] Final Memory: 63M/656M 
[INFO] ------------------------------------------------------------------------ 

Я ломать голову над этим вопросом в течение нескольких дней в настоящее время, но я понятия не имею, почему это не работает.

+0

упаковка be.bodyreset.rest.dto не существует ?? Почему этого не происходит? –

+0

Пакет существует. Я могу найти файлы классов в файле .jar, который сгенерирован. IntelliJ не жалуется и не распознает пакеты и классы зависимостей rest-client-microservice. –

+0

Система говорит, что ошибка есть, поэтому я бы предложил более внимательно рассмотреть ее и выяснить, есть ли с ней какие-либо проблемы. Просто взглянув на вывод, который вы предоставили, мы не можем найти, в чем проблема! –

ответ

14

Я понял. Остальной-клиент-microservice является Загрузочным проектом Spring и использует следующий плагин:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
     </execution> 
    </executions> 
</plugin> 

баночка переупаковывается и все пакеты и классы помещаются в папке BOOT-INF. Вот почему Maven не может их найти. Вы можете исправить это, определив плагин так:

<plugin> 
    <groupId>org.springframework.boot</groupId> 
    <artifactId>spring-boot-maven-plugin</artifactId> 
    <executions> 
     <execution> 
      <goals> 
       <goal>repackage</goal> 
      </goals> 
      <configuration> 
       <classifier>exec</classifier> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

С помощью этой конфигурации Spring загрузки Maven плагин создаст 2 баночки: главный один будет такой же, как обычный Maven проекта, в то время как второй один будет добавить классификатор и быть исполняемым JAR.

+0

Впустую 2 часа, пытаясь понять это. Мне было интересно, что что-то не так с моим Maven, однако получается, что плагин Spring boot Build по умолчанию помещает все файлы классов в папку BOOT-INF, которые вызывают ошибку компилятора. Закончилось использование простого ванильного «maven-compiler-plugin», когда я столкнулся с вашим лучшим решением. благодаря –

 Смежные вопросы

  • Нет связанных вопросов^_^