我如何在 tomee-maven-plugin 中指定路径,以便部署和取消部署都有效?
How can I specify the path in tomee-maven-plugin such that both deploy and undeploy works?
我正在尝试构建一个 pom.xml
来处理对远程 TomEE (PluME 7.0.3) 服务器的部署和取消部署。但是,我无法找出在 path
配置标记中使用的正确值。这是一个有效的插件配置,用于将我的应用程序(成熟的 EAR,用于教育目的)部署到远程 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>
而要取消部署,我必须像这样配置插件:
<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>
请注意 path
配置中的差异。在命令行中,这表现类似;当 pom.xml 中的 path
标记被省略时,我可以像这样部署和取消部署:
mvn tomee:deploy -Dtomee-plugin.archive=target/someear-1.0-SNAPSHOT.ear
mvn tomee:undeploy -Dtomee-plugin.archive=someear-1.0-SNAPSHOT
有没有人经历过同样的行为,并找到了缓解这种情况的方法?我希望在 pom.xml 中完全配置部署和取消部署,而无需在调用 mvn
时指定其他参数。但是,截至目前,我不能这样做,因为 tomee:deploy
似乎期望 path
与 tomee:undeploy
不同。
编辑
好的,根据@Old School 编辑过的答案,我可以这样做:
<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>
然后,在 tomee-maven-plugin
的配置部分中指定 path
,如下所示:
...
<path>${my-tomee-maven-plugin-path}</path>
...
然后,像这样执行maven:
mvn tomee:deploy
mvn tomee:undeploy -Pundeploy
我认为这比在执行时指定一些 -D
参数更方便 (YMMV)。
但是,在我看来,完美的解决方案是,如果您可以在 tomee-maven-plugin
的配置中配置 path
,这样 tomee:deploy
和 tomee:undeploy
无需进一步工作即可废话。
编辑2
我发现了另一种没有配置文件的可能性,我以前似乎找不到(基于: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>
用法:
mvn tomee:deploy@deploy-it
mvn tomee:undeploy@undeploy-it
我使用的是 glassfish,而不是 tomcat,但我认为同样的原则也适用于此。在 GF 中,deploy 需要完整路径,而 undeploy 只需要包名。例如,glassfish 是这样的:
asadmin deploy C:\Projects\Java\helloworld\helloworld.war
和
asadmin undeploy helloworld
取消部署不需要路径,因为文件在服务器上,一旦命名,glassfish/tomcat 就知道它在哪里。
根据评论进行编辑:我为 glassfish 的事情道歉,我没有注意你提到 tomcat 我已经编辑了一些以在某种程度上反映这一点。
我想我现在明白你在找什么了。查看:
- Maven Resource Filtering
我认为这是另一个 SO 答案,他在准确解释您正在寻找的内容方面做得非常出色。希望有用。
我正在尝试构建一个 pom.xml
来处理对远程 TomEE (PluME 7.0.3) 服务器的部署和取消部署。但是,我无法找出在 path
配置标记中使用的正确值。这是一个有效的插件配置,用于将我的应用程序(成熟的 EAR,用于教育目的)部署到远程 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>
而要取消部署,我必须像这样配置插件:
<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>
请注意 path
配置中的差异。在命令行中,这表现类似;当 pom.xml 中的 path
标记被省略时,我可以像这样部署和取消部署:
mvn tomee:deploy -Dtomee-plugin.archive=target/someear-1.0-SNAPSHOT.ear
mvn tomee:undeploy -Dtomee-plugin.archive=someear-1.0-SNAPSHOT
有没有人经历过同样的行为,并找到了缓解这种情况的方法?我希望在 pom.xml 中完全配置部署和取消部署,而无需在调用 mvn
时指定其他参数。但是,截至目前,我不能这样做,因为 tomee:deploy
似乎期望 path
与 tomee:undeploy
不同。
编辑
好的,根据@Old School 编辑过的答案,我可以这样做:
<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>
然后,在 tomee-maven-plugin
的配置部分中指定 path
,如下所示:
...
<path>${my-tomee-maven-plugin-path}</path>
...
然后,像这样执行maven:
mvn tomee:deploy
mvn tomee:undeploy -Pundeploy
我认为这比在执行时指定一些 -D
参数更方便 (YMMV)。
但是,在我看来,完美的解决方案是,如果您可以在 tomee-maven-plugin
的配置中配置 path
,这样 tomee:deploy
和 tomee:undeploy
无需进一步工作即可废话。
编辑2
我发现了另一种没有配置文件的可能性,我以前似乎找不到(基于: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>
用法:
mvn tomee:deploy@deploy-it
mvn tomee:undeploy@undeploy-it
我使用的是 glassfish,而不是 tomcat,但我认为同样的原则也适用于此。在 GF 中,deploy 需要完整路径,而 undeploy 只需要包名。例如,glassfish 是这样的:
asadmin deploy C:\Projects\Java\helloworld\helloworld.war
和
asadmin undeploy helloworld
取消部署不需要路径,因为文件在服务器上,一旦命名,glassfish/tomcat 就知道它在哪里。
根据评论进行编辑:我为 glassfish 的事情道歉,我没有注意你提到 tomcat 我已经编辑了一些以在某种程度上反映这一点。
我想我现在明白你在找什么了。查看:
- Maven Resource Filtering
我认为这是另一个 SO 答案,他在准确解释您正在寻找的内容方面做得非常出色。希望有用。