mavenmaven-pluginapache-tomeetomee-7

How can I specify the path in tomee-maven-plugin such that both deploy and undeploy works?


I'm trying to build a pom.xml to handle the deployment and undeployment to a remote TomEE (PluME 7.0.3) server. However, I cannot figure out the correct value to use in the path configuration tag. Here's a working plugin configuration for deploying my application (full-blown EAR, for educational purposes) to the remote TomEE:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomee.maven</groupId>
      <artifactId>tomee-maven-plugin</artifactId>
      <version>7.0.3</version>
      <configuration>
        <context>someear</context>
        <tomeeClassifier>plus</tomeeClassifier>
        <tomeeHost>192.168.100.100</tomeeHost>
        <debugPort>8000</debugPort>
        <tomeeAjpPort>8009</tomeeAjpPort>
        <tomeeHttpPort>8080</tomeeHttpPort>
        <tomeeShutdownPort>8005</tomeeShutdownPort>
        <path>target/someear-1.0-SNAPSHOT.ear</path>
        <useBinaries>true</useBinaries>
      </configuration>
    </plugin>
  </plugins>
</build>

Whereas to undeploy, I would have to configure the plugin like this:

<build>
  <plugins>
    <plugin>
      <groupId>org.apache.tomee.maven</groupId>
      <artifactId>tomee-maven-plugin</artifactId>
      <version>7.0.3</version>
      <configuration>
        <context>someear</context>
        <tomeeClassifier>plus</tomeeClassifier>
        <tomeeHost>192.168.100.100</tomeeHost>
        <debugPort>8000</debugPort>
        <tomeeAjpPort>8009</tomeeAjpPort>
        <tomeeHttpPort>8080</tomeeHttpPort>
        <tomeeShutdownPort>8005</tomeeShutdownPort>
        <path>someear-1.0-SNAPSHOT</path>
        <useBinaries>true</useBinaries>
      </configuration>
    </plugin>
  </plugins>
</build>

Notice the difference in the path configuration. From the command line, this behaves similarly; when the path tag in the pom.xml is omitted, I can deploy and undeploy like this:

mvn tomee:deploy -Dtomee-plugin.archive=target/someear-1.0-SNAPSHOT.ear
mvn tomee:undeploy -Dtomee-plugin.archive=someear-1.0-SNAPSHOT

Has anybody experienced the same behaviour, and found a way to mitigate this? I'd like to have both deploy and undeploy configured completely in the pom.xml without specifying additional parameters when calling mvn. But, as of now, I cannot do that, since tomee:deploy seems to expect a different path than tomee:undeploy.

EDIT

Ok, based on @Old School's edited answer, I can do something like this:

<profiles>
  <profile>
    <id>deploy</id>
    <activation>
      <activeByDefault>true</activeByDefault>
    </activation>
    <properties>
      <my-tomee-maven-plugin-path>target/someear-1.0-SNAPSHOT.ear</tomee-maven-plugin-path>
    </properties>
  </profile>
  <profile>
    <id>undeploy</id>
    <properties>
      <my-tomee-maven-plugin-path>someear-1.0-SNAPSHOT</tomee-maven-plugin-path>
    </properties>
  </profile>
</profiles>

Then, specify path in tomee-maven-plugin's configuration section like this:

        ...
        <path>${my-tomee-maven-plugin-path}</path>
        ...

Then, execute maven like this:

mvn tomee:deploy
mvn tomee:undeploy -Pundeploy

Which I consider more convenient than specifying some -D parameters at execution time (YMMV).

However, the perfect solution in my opinion would be if you could configure path in tomee-maven-plugin's configuration such that both tomee:deploy and tomee:undeploy work without further ado.

EDIT2

I discovered another possibility without profiles which I was seemingly unable to find before (based on: http://tomee-openejb.979440.n4.nabble.com/Deployment-to-TomEE-7-0-0-using-tomee-maven-plugin-error-Cannot-open-input-stream-to-server-tp4679142p4679282.html):

<plugin>
    <groupId>org.apache.tomee.maven</groupId>
    <artifactId>tomee-maven-plugin</artifactId>
    <version>7.0.3</version>
    <configuration>
        <context>${project.artifactId}</context>
        <tomeeClassifier>plus</tomeeClassifier>
        <context>someear</context>
        <tomeeClassifier>plus</tomeeClassifier>
        <tomeeHost>192.168.100.100</tomeeHost>
        <debugPort>8000</debugPort>
        <tomeeAjpPort>8009</tomeeAjpPort>
        <tomeeHttpPort>8080</tomeeHttpPort>
        <tomeeShutdownPort>8005</tomeeShutdownPort>
<!-- no <path> tag -->
        <useBinaries>true</useBinaries>
    </configuration>
    <executions>
        <execution>
            <id>deploy-it</id>
            <phase>none</phase>
            <goals>
                <goal>deploy</goal>
            </goals>
            <configuration>
                <path>target/someear-1.0-SNAPSHOT.ear</path>
            </configuration>
        </execution>
        <execution>
            <id>undeploy-it</id>
            <phase>none</phase>
            <goals>
                <goal>undeploy</goal>
            </goals>
            <configuration>
                <path>someear-1.0-SNAPSHOT</path>
            </configuration>
        </execution>
    </executions>
</plugin>

Usage:

mvn tomee:deploy@deploy-it
mvn tomee:undeploy@undeploy-it

Solution

  • I use glassfish, not tomcat, but I think the same principles apply here. In GF, deploy requires the full path and the undeploy requires only the package name. For example, glassfish goes something like:

    asadmin deploy C:\Projects\Java\helloworld\helloworld.war
    

    and

    asadmin undeploy helloworld
    

    There is no path required on undeploy because the file is on the server and once you name it, glassfish/tomcat knows where it is.

    EDIT based off comments: My apologies for the glassfish stuff, I wasn't paying attention to you mentioning tomcat and I've edited a bit to reflect that somewhat.

    I do understand now, I think, what you're looking for. Check out:

    It's another SO answer where he does a fantastic job of explaining exactly what you're looking for, I think. I hope that works.