2017-04-03 81 views
0

我正在使用POM.xml将WAR文件部署到Wildfly服务器,具体取决于环境已安装的应用程序。我与之合作的项目有3个不同的应用程序,一个环境可以安装1到3个这样的应用程序。选择多个配置文件时不会部署wildfly-maven-plugin

因此,我为每个应用程序制作了配置文件 - 如果安装了应用程序A,请运行应用程序配置文件以将A应用程序部署到服务器。如果安装了B,请运行应用程序B配置文件等。

问题是,当我使用多个应用程序(例如应用程序A和应用程序B)运行我的Maven构建时,它只部署其中一个应用程序。如果我单独在每个配置文件上运行单独的Maven构建,它部署得很好。我认为我的问题是与Maven的wildfly-插件本身,有多个配置文件运行时一样,他们显示为有效使用Maven的help:active-profiles选项时:

[INFO] 
Active Profiles for Project 'com.foo.bar:auto-deploy:pom:1.0.0-SNAPSHOT': 

The following profiles are active: 

- wildfly-deploy-a (source: com.foo.bar:auto-deploy:1.0.0-SNAPSHOT) 
- wildfly-deploy-b (source: com.foo.bar:auto-deploy:1.0.0-SNAPSHOT) 

生成的输出本身是如下:

[INFO]                   
[INFO] ------------------------------------------------------------------------ 
[INFO] Building Auto-Deploy Wildfly 1.0.0-SNAPSHOT 
[INFO] ------------------------------------------------------------------------ 
[INFO] 
[INFO] --- maven-install-plugin:2.4:install (default-install) @ auto-deploy --- 
[INFO] Installing C:\..........\AutoDeploy\pom.xml to C:\.....\.m2\repository\com\foo\bar\auto-deploy\1.0.0-SNAPSHOT\auto-deploy-1.0.0-SNAPSHOT.pom 
[INFO] 
[INFO] --- maven-deploy-plugin:2.7:deploy (default-deploy) @ auto-deploy --- 
[INFO] Skipping artifact deployment 
[INFO] 
[INFO] --- wildfly-maven-plugin:1.1.0.Alpha11:deploy-artifact (deploy-a) @ auto-deploy --- 
Apr 03, 2017 5:31:52 PM org.xnio.Xnio <clinit> 
INFO: XNIO version 3.3.1.Final 
Apr 03, 2017 5:31:52 PM org.xnio.nio.NioXnio <clinit> 
INFO: XNIO NIO Implementation Version 3.3.1.Final 
Apr 03, 2017 5:31:53 PM org.jboss.remoting3.EndpointImpl <clinit> 
INFO: JBoss Remoting version 4.0.9.Final 
[INFO] Authenticating against security realm: ManagementRealm 
[INFO] 
[INFO] --- wildfly-maven-plugin:1.1.0.Alpha11:deploy-artifact (deploy-b) @ auto-deploy --- 
[INFO] Authenticating against security realm: ManagementRealm 
[INFO] ------------------------------------------------------------------------ 
[INFO] BUILD SUCCESS 
[INFO] ------------------------------------------------------------------------ 
[INFO] Total time: 16.615 s 
[INFO] Finished at: 2017-04-03T17:32:06-04:00 
[INFO] Final Memory: 20M/210M 
[INFO] ------------------------------------------------------------------------ 

在这种情况下,无论是deploy-adeploy-b轮廓出现运行,但只为deploy-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> 
    <artifactId>auto-deploy</artifactId> 
    <packaging>pom</packaging> 
    <name>Auto-Deploy Wildfly</name> 

    <parent> 
     <groupId>com.foo.bar</groupId> 
     <artifactId>parent-project</artifactId> 
     <version>1.0.0-SNAPSHOT</version> 
    </parent> 

    <properties> 
     <wildfly.deploy.version>1.0.2.Final</wildfly.deploy.version> 
     <wildfly.hostname>localhost</wildfly.hostname> 
     <wildfly.mgmt.native.port>9999</wildfly.mgmt.native.port>    
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>com.foo.bar</groupId> 
      <artifactId>app-a</artifactId> 
      <version>${project.version}</version> 
      <type>war</type> 
     </dependency> 
     <dependency> 
      <groupId>com.foo.bar</groupId> 
      <artifactId>app-b</artifactId> 
      <version>${project.version}</version> 
      <type>war</type> 
     </dependency> 
    </dependencies> 

    <build> 
     <pluginManagement> 
      <plugins> 
       <plugin> 
        <groupId>org.wildfly.plugins</groupId> 
        <artifactId>wildfly-maven-plugin</artifactId> 
        <version>1.1.0.Alpha11</version> 
        <configuration> 
         <force>true</force> 
         <protocol>remote</protocol> 
         <hostname>${wildfly.hostname}</hostname> 
         <port>${wildfly.mgmt.native.port}</port> 
         <username>${wildfly.mgmt.username}</username> 
         <password>${wildfly.mgmt.password}</password> 
         <timeout>120</timeout> 
        </configuration> 
       </plugin> 
      </plugins> 
     </pluginManagement> 
     <plugins>   
      <plugin> 
       <groupId>org.wildfly.plugins</groupId> 
       <artifactId>wildfly-maven-plugin</artifactId> 
      </plugin> 
     </plugins> 
    </build> 

    <profiles> 
     <profile> 
      <id>wildfly-deploy-a</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.wildfly.plugins</groupId> 
         <artifactId>wildfly-maven-plugin</artifactId> 
         <configuration> 
          <groupId>com.foo.bar</groupId> 
          <artifactId>app-a</artifactId> 
          <skip>false</skip> 
         </configuration> 
         <executions> 
          <execution> 
           <id>deploy-a</id> 
           <phase>deploy</phase> 
           <goals> 
            <goal>deploy-artifact</goal> 
           </goals> 
          </execution> 
         ... 
     </profile> 
     <profile> 
      <id>wildfly-deploy-b</id> 
      <build> 
       <plugins> 
        <plugin> 
         <groupId>org.wildfly.plugins</groupId> 
         <artifactId>wildfly-maven-plugin</artifactId> 
         <configuration> 
          <groupId>com.foo.bar</groupId> 
          <artifactId>app-b</artifactId> 
          <skip>false</skip> 
         </configuration> 
         <executions> 
          <execution> 
           <id>deploy-b</id> 
           <phase>deploy</phase> 
           <goals> 
            <goal>deploy-artifact</goal> 
           </goals> 
          </execution> 
         ... 
     </profile> 
    </profiles> 
</project> 

而我正在使用mvn deploy -Pwildfly-deploy-a,wildfly-deploy-b执行它。我将配置文件传递给Maven的顺序似乎并不重要 - 它总是部署POM中最后一个配置文件中定义的应用程序(所以应用程序b)。我也试过mvn deploy -Pwildfly-deploy-a -Pwildfly-deploy-b,那也不管用。

我违反了一些Maven的最佳实践或在这里?我今天研究的所有内容都表明这应该起作用,这就是为什么我有一个暗示插件导致了这种行为的原因。

编辑 - 我还试图通过使其中一个配置文件使用deploy目标和其他用途的deploy-artifact的目标,但我得到了相同的行为混合起来。这可能是一些网络或线程问题?

EDIT 2 - 其他怪异的行为:当两个配置文件使用,而不是deploy-artifact无论是应用程序的deploy目标被部署......在运行时分别使用deploy他们将部署的罚款。

回答

1

您的插件配置无法合并;第二个将总是覆盖第一个。

关键是要配置移动到执行部分:

<profiles> 
    <profile> 
     <id>wildfly-deploy-a</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.wildfly.plugins</groupId> 
        <artifactId>wildfly-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>deploy-a</id> 
          <phase>deploy</phase> 
          <goals> 
           <goal>deploy-artifact</goal> 
          </goals> 
          <configuration> 
           <groupId>com.foo.bar</groupId> 
           <artifactId>app-a</artifactId> 
           <skip>false</skip> 
          </configuration> 
         </execution> 
        ... 
    </profile> 
    <profile> 
     <id>wildfly-deploy-b</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.wildfly.plugins</groupId> 
        <artifactId>wildfly-maven-plugin</artifactId> 
        <executions> 
         <execution> 
          <id>deploy-b</id> 
          <phase>deploy</phase> 
          <goals> 
           <goal>deploy-artifact</goal> 
          </goals> 
          <configuration> 
           <groupId>com.foo.bar</groupId> 
           <artifactId>app-b</artifactId> 
           <skip>false</skip> 
          </configuration> 
         </execution> 
        ... 
    </profile> 
</profiles> 

现在每次执行都有它自己的配置。

+0

谢谢,那为我修好了!现在将配置移动到任何Maven插件的执行块标准(使用配置文件时)? – SourMonk

+0

它独立于配置文件。实际上,你可以拆分配置并将静态部分(如' false')放在之前的位置,并在新位置只执行特定的配置。有了一些插件,你可以运行一系列的执行,可能在不同的阶段。 –