选择多个配置文件时,wildfly-maven-plugin 未部署

Posted

技术标签:

【中文标题】选择多个配置文件时,wildfly-maven-plugin 未部署【英文标题】:wildfly-maven-plugin not deploying when multiple profiles selected 【发布时间】:2017-08-28 22:13:48 【问题描述】:

我正在使用 POM.xml 将 WAR 文件部署到 Wildfly 服务器,具体取决于该环境已安装的应用程序。我使用的项目有 3 个不同的应用程序,一个环境可能安装了 1 到 3 个这些应用程序。

所以,我已经为每个应用程序制作了配置文件——如果安装了应用程序 A,则运行应用程序 A 配置文件以将 A 应用程序部署到服务器。如果安装了 B,则运行应用程序 B 配置文件等。

问题是,当我使用多个应用程序(例如应用程序 A 和应用程序 B)运行 Maven 构建时,它只部署其中一个。如果我在每个配置文件上单独运行单独的 Maven 构建,它部署得很好。我认为我的问题在于 maven-wildfly-plugin 本身,因为当使用多个配置文件运行时,它们在使用 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 目标而不是 deploy-artifact 时,没有一个应用程序被部署...当使用 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>

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

【讨论】:

谢谢,为我修好了!现在是否将配置移动到任何 Maven 插件的执行块标准中(使用配置文件时)? 它独立于配置文件。您实际上可以拆分配置并将静态部分(例如&lt;skip&gt;false&lt;/skip&gt;)放在您之前拥有的位置,并将执行特定的配置放在新位置。使用某些插件,您可以运行一系列执行,可能在不同的阶段。

以上是关于选择多个配置文件时,wildfly-maven-plugin 未部署的主要内容,如果未能解决你的问题,请参考以下文章

选择多个文件时$ @的行为如何?

YII2 gii 配置多个数据库, 或者多个配置文件的时候 gii 出现数据表不存在, 实现选择数据库 Table '****' does not exist. 解决 就在gii

执行构建时选择多个分支

Apache配置文件详解

pom配置多个jar包压缩成zip

单击添加按钮时,角度选择多个文件而不上传和上传