2016-09-08 2 views
1

Я пытаюсь получить plug-in-maven-plugin для сборки двух перепутанных банок для двух разных основных классов. I'added два блока выполнения с их конкретным параметром MainClass в блоке конфигурации, но, кажется, что плагин не уважает его, потому что блок конфигурации находится внутри блока исполнения, а не на уровне плагинов и я всегда получаюКак я могу построить две перепутанные банки с Spring Boot

Execution default of goal org.springframework.boot:spring-boot-maven-plugin:1.3.0.RELEASE:repackage failed: Unable to find a single main class from the following candidates [com.mystuff.tools.b4commandline.Application, com.mystuff.tools.loadtester.Application] 

вот раздел плагина плагина maven-spring-boot-maven pom.

<plugin> 
      <groupId>org.springframework.boot</groupId> 
      <artifactId>spring-boot-maven-plugin</artifactId> 
      <executions> 
       <execution> 
        <id>${artifactId}</id> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
        <configuration> 
         <mainClass>com.mystuff.tools.loadtester.Application</mainClass> 
         <finalName>${artifactId}</finalName> 
        </configuration> 
       </execution> 
       <execution> 
        <id>b4-commandline</id> 
        <goals> 
         <goal>repackage</goal> 
        </goals> 
        <configuration> 
         <mainClass>com.mystuff.tools.b4commandline.Application</mainClass> 
         <finalName>b4-commandline</finalName> 
        </configuration> 
       </execution> 
      </executions> 
     </plugin> 

Любая помощь по этому вопросу будет замечательной. Я видел рецепты в stackoverflow для maven-plugin, но они не применимы к spring-boot.

ответ

1

Предполагая, что это выполнимо, выполнение того, что вы просите, означало бы, что произведенные 2 барабана были бы идентичны, кроме атрибута своего очевидца main-class. я предпочел бы предложить вам упаковать один баночку и использовать пружинные профили для запуска его:

$ java -jar -Dspring.profiles.active=profile1 YourApp.jar 
$ java -jar -Dspring.profiles.active=profile2 YourApp.jar 

Это позволяет определить 2 application-${profile}.properties и @Conditional классы конфигурации, все они основаны на имени профиля.

0

Я не мог заставить его работать как в пределах одной сборки (я не говорю, что это не возможно, хотя), однако один вариант заключается в определении 2 Maven профили:

<profiles> 
    <profile> 
     <id>one</id> 
     <activation> 
      <property> 
       <name>one</name> 
      </property> 
     </activation> 

     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>default</id> 
          <goals> 
           <goal>repackage</goal> 
          </goals> 
          <configuration> 
           <mainClass>com.xyz.LauncherOne</mainClass> 
           <finalName>one</finalName> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 

    </profile> 

    <profile> 
     <id>two</id> 
     <activation> 
      <property> 
       <name>two</name> 
      </property> 
     </activation> 

     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.springframework.boot</groupId> 
        <artifactId>spring-boot-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>default</id> 
          <goals> 
           <goal>repackage</goal> 
          </goals> 
          <configuration> 
           <mainClass>com.xyz.LauncherTwo</mainClass> 
           <finalName>two</finalName> 
          </configuration> 
         </execution> 
        </executions> 
       </plugin> 
      </plugins> 
     </build> 
    </profile> 
</profiles> 

Затем построить его дважды с использованием обоих профилей (активировали свойство в моем примере кода):

$ mvn -Done clean install 
$ mvn -Dtwo clean install 

это создает: one.jar и two.jar