# Deploy/Undeploy Examples

## Deploying your application

The plugin goals deploy, undeploy, and redeploy can be used to deploy, redeploy and undeploy applications to a WildFly. The first step is to add the appropriate configuration to your plugin configuration in the POM.

    <project>
        ...
        <build>
            ...
            <plugins>
                ...
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>4.2.2.Final</version>
                </plugin>
                ...
            </plugins>
            ...
        </build>
    ...
    </project>

The file listed under the `filename` parameter can be deployed to the server using the `[deploy](./deploy-mojo.html)` goal.

    mvn wildfly:deploy

The file can later be redeployed or undeployed using the appropriate goals.

    mvn wildfly:redeploy
      mvn wildfly:undeploy

You can also set the deployment operation to execute at a specific phase, for example the `install` phase.

    <project>
        ...
        <build>
            ...
            <plugins>
                ...
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>4.2.2.Final</version>
                    <executions>
                        <execution>
                            <phase>install</phase>
                            <goals>
                                <goal>deploy</goal>
                            </goals>
                        </execution>
                    </executions>
                </plugin>
                ...
            </plugins>
            ...
        </build>
    ...
    </project>

## Deploying other artifacts

It is also possible to deploy other artifacts that are not related to your deployment, e.g. database drivers:

    <project>
        ...
        <build>
            ...
            <plugins>
                ...
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>4.2.2.Final</version>
                    <executions>
                        <execution>
                            <phase>install</phase>
                            <goals>
                                <goal>deploy-artifact</goal>
                            </goals>
                            <configuration>
                                <groupId>postgresql</groupId>
                                <artifactId>postgresql</artifactId>
                                <name>postgresql.jar</name>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
                ...
            </plugins>
            ...
        </build>
    ...
    </project>

The artifact must be already listed as a dependency in the projects' pom.xml.

## Undeployments using Regex-Pattern.

You are allowed to perform undeployments based on a regex-pattern. This is useful as soon as you use a version identifier within your deployment name. An existing deployment is matched by regex and replaced by the new one. This example below will undeploy the deployment starting with “postgres-”.

    <project>
      ...
      <build>
          ...
          <plugins>
              ...
              <plugin>
                  <groupId>org.wildfly.plugins</groupId>
                  <artifactId>wildfly-maven-plugin</artifactId>
                  <version>4.2.2.Final</version>
                  <executions>
                      <execution>
                          <phase>clean</phase>
                          <goals>
                              <goal>undeploy-artifact</goal>
                          </goals>
                          <configuration>
                              <groupId>postgresql</groupId>
                              <artifactId>postgresql</artifactId>
                              <version>2.1.0</version>
                              <type>jar</type>
                              <name>postgresql-2.1.0.jar</name>
                              <match-pattern>postgresql-.*</match-pattern>
                          </configuration>
                      </execution>
                  </executions>
              </plugin>
              ...
          </plugins>
          ...
      </build>
    ...
    </project>

In case multiple deployments match the specified pattern you can decide, how the plugin should behave. You have the following options:

- first: The first artifact is taken for undeployment. Other artifacts won't be touched. The list of artifacts is sorted using the default collator.
- all: All matching artifacts are undeployed.
- fail: Default, Deployment fails.

## Deploying your application in domain mode.

Deploying in domain mode works the same as the examples above, except you need to add the `<server-groups>` property as well as specify at least one server group.

    <project>
        ...
        <build>
            ...
            <plugins>
                ...
                <plugin>
                    <groupId>org.wildfly.plugins</groupId>
                    <artifactId>wildfly-maven-plugin</artifactId>
                    <version>4.2.2.Final</version>
                    <configuration>
                        <server-groups>
                            <server-group>main-server-group</server-group>
                        </server-groups>
                    </configuration>
                </plugin>
                ...
            </plugins>
            ...
        </build>
    ...
    </project>