問題描述
Maven‑glassfish‑plugin:如何指定部署目標? (Maven‑glassfish‑plugin: how to specify deploy target?)
I'm using Maven 3.0.4 with maven‑glassfish‑plugin 2.1 (http://maven‑glassfish‑plugin.java.net/) and Glassfish 2.1.1.
Relevant POM.XML fragment:
<profile>
<id>deploy</id>
<build>
<plugins>
<plugin>
<groupId>org.glassfish.maven.plugin</groupId>
<artifactId>maven‑glassfish‑plugin</artifactId>
<version>2.1</version>
<configuration>
<glassfishDirectory>/home/user/glassfish</glassfishDirectory>
<domain>
<name>domain1</name>
<host>hostname</host>
<adminPort>4848</adminPort>
</domain>
<autoCreate>false</autoCreate>
<terse>true</terse>
<debug>false</debug>
<echo>true</echo>
<user>admin</user>
<passwordFile>/home/user/user.gfpass</passwordFile>
<components>
<component>
<name>${project.artifactId}</name>
<artifact>${project.build.directory}/${project.build.finalName}.war</artifact>
</component>
</components>
</configuration>
</plugin>
</plugins>
</build>
</profile>
The problem is, the Glassfish server I'm deploying onto has one stand‑alone instance per developer configured, and running mvn glassfish:deploy
causes:
[INFO] ‑‑‑ maven‑glassfish‑plugin:2.1:deploy (default‑cli) @ project ‑‑‑
[INFO] deploy ‑‑port 4848 ‑‑enabled=true ‑‑host hostanme ‑‑precompilejsp=false ‑‑verify=false ‑‑echo=true ‑‑upload=true ‑‑terse=true ‑‑generatermistubs=false ‑‑passwordfile /home/user/user.gfpass ‑‑interactive=false ‑‑availabilityenabled=false ‑‑name project ‑‑target server ‑‑force=true ‑‑user admin /home/user/git/project/target/project‑1.0.0‑SNAPSHOT.war
[ERROR] CLI171 Command deploy failed : Application project is already deployed on other targets. Please remove all references or specify all targets (if not using asadmin command line) before attempting redeploy operation
[ERROR] Deployment of /home/user/git/project/target/project‑1.0.0‑SNAPSHOT.war failed.
Note ‑‑target server
in the executed command.
How can I specify in POM which instance (i.e. target
) I want to deploy to?
‑‑‑‑‑
參考解法
方法 1:
After some more research, the answer is NO, I CANNOT.
There are two options I'm aware of:
- Use
exec‑maven‑plugin
to callasadmin
with desired parameters, or - Fork your own version of
maven‑glassfish‑plugin
with changes required (that's what I've done as for now).
As it turns out, the plugin is very simple, and I've no problem to modify it to suit my needs. More troublesome was building it, but that's another story.
方法 2:
Hello my solution was this:
I left the pom as a redeploy execution
<execution>
<id>gf‑deploy</id>
<phase>package</phase>
<goals>
<goal>redeploy</goal>
</goals>
</execution>
then I modified the asadmin.bat file, and, after the lines where the script is calling the appserver‑cli.jar file I added 3 new lines, notice that redeploy calls an undeploy and a deploy command so the maven glassfish plugin's trick here is print something when the undeploy command runs (Tihs will confuse the maven plugin as if the undeploy command were success always), but, when the asadmin command is deploy the flow will run normal.
:run
if NOT %1 == undeploy goto :end
%JAVA% ‑jar "%~dp0..\lib\client\appserver‑cli.jar" %*
ECHO "TEST"
:end
if %1 == undeploy goto :end1
%JAVA% ‑jar "%~dp0..\lib\client\appserver‑cli.jar" %*
:end1
after do this modification reploy is alaways working so great!
(by Jerzyna、Jerzyna、Juan Pablo G)