Перераспределить выносную стеклянную рыбу с грузом не получится

В настоящее время я пытаюсь использовать Cargo для развертывания приложения на удаленном Glassfish 3.1.2 через бамбук Atlassian. Это среда разработки, поэтому одно и то же приложение с другим номером версии будет развертываться каждый раз в одном корне контекста.

Но каждый раз, когда я выполняю работу с главной целью:

org.codehaus.cargo:cargo-maven2-plugin:redeploy

Я продолжаю получать ошибку:

11-Jun-2013 15:13:48    Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-cli of goal org.codehaus.cargo:cargo-maven2-plugin:1.4.2:redeploy failed: Deployment has failed: Action failed Deploying application to target server failed; Error occurred during deployment: Application with name myapp-1.4.8 is already registered. Either specify that redeployment must be forced, or redeploy the application. Or if this is a new deployment, pick a different name. Please see server.log for more details.
11-Jun-2013 15:13:48    
11-Jun-2013 15:13:48            at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:110)
11-Jun-2013 15:13:48            at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
11-Jun-2013 15:13:48            ... 19 more
11-Jun-2013 15:13:48    Caused by: org.codehaus.cargo.util.CargoException: Deployment has failed: Action failed Deploying application to target server failed; Error occurred during deployment: Application with name myapp-1.4.8 is already registered. Either specify that redeployment must be forced, or redeploy the application. Or if this is a new deployment, pick a different name. Please see server.log for more details.
11-Jun-2013 15:13:48    
11-Jun-2013 15:13:48            at org.codehaus.cargo.container.spi.deployer.AbstractJsr88Deployer.waitForProgressObject(AbstractJsr88Deployer.java:285)
11-Jun-2013 15:13:48            at org.codehaus.cargo.container.spi.deployer.AbstractJsr88Deployer.deploy(AbstractJsr88Deployer.java:123)
11-Jun-2013 15:13:48            at org.codehaus.cargo.container.spi.deployer.AbstractJsr88Deployer.redeploy(AbstractJsr88Deployer.java:207)
11-Jun-2013 15:13:48            at org.codehaus.cargo.maven2.DeployerRedeployMojo.performDeployerActionOnSingleDeployable(DeployerRedeployMojo.java:50)
11-Jun-2013 15:13:48            at org.codehaus.cargo.maven2.AbstractDeployerMojo.performDeployerActionOnAllDeployables(AbstractDeployerMojo.java:180)
11-Jun-2013 15:13:48            at org.codehaus.cargo.maven2.AbstractDeployerMojo.doExecute(AbstractDeployerMojo.java:97)
11-Jun-2013 15:13:48            at org.codehaus.cargo.maven2.AbstractCargoMojo.execute(AbstractCargoMojo.java:432)
11-Jun-2013 15:13:48            at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
11-Jun-2013 15:13:48            ... 20 more
11-Jun-2013 15:13:48    [ERROR] 
11-Jun-2013 15:13:48    [ERROR] 
11-Jun-2013 15:13:48    [ERROR] For more information about the errors and possible solutions, please read the following articles:
11-Jun-2013 15:13:48    [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/PluginExecutionException
11-Jun-2013 15:13:48    [ERROR] 
11-Jun-2013 15:13:48    [ERROR] After correcting the problems, you can resume the build with the command

Мне нужно, чтобы плагин Cargo переместил развертывание независимо от того, что приложение (более старая версия) уже существует для этого корневого контекста.

Если бы я запускал команду asadmin вручную, я мог бы легко добавить параметр --force, и это сработало бы.

У меня есть дополнительное ограничение: я не могу установить локальную версию glassfish на сервере, на котором размещен экземпляр бамбука, поэтому я не могу использовать такие вещи, как плагин maven sh, для ручной сборки команды asadmin.

Ниже приведен соответствующий фрагмент pom.xml:

<build>
        <finalName>myapp-${project.version}</finalName>
        <plugins>
            <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <version>1.4.2</version>
                <configuration>
                    <container>
                        <containerId>glassfish3x</containerId>
                        <type>remote</type>
                    </container>
                    <configuration>
                        <type>runtime</type>
                        <properties>
                            <cargo.remote.username>${cargo.remote.username}</cargo.remote.username>
                            <cargo.remote.password>${cargo.remote.password}</cargo.remote.password>
                            <cargo.glassfish.admin.port>${cargo.glassfish.admin.port}</cargo.glassfish.admin.port>
                            <cargo.hostname>${cargo.hostname}</cargo.hostname>
                        </properties>
                    </configuration>
                </configuration>
                <dependencies>
                    <dependency>
                        <groupId>org.glassfish.deployment</groupId>
                        <artifactId>deployment-client</artifactId>
                        <version>3.1.1</version>

                    </dependency>
                </dependencies>
            </plugin>

Есть идеи?

4 ответа

Решение

Я наконец-то узнал, как этого добиться, слегка изменив способ развертывания и управления версиями своего приложения и используя систему управления версиями приложения Glassfish. Ниже приведена ссылка на небольшой пост в блоге, который я написал, чтобы показать, как этого добиться:

запись в блоге - развертывание на удаленной стеклянной рыбке с помощью грузового плагина

Была такая же проблема. Решил это, используя предложение Марлона, просто добавив аргументы времени выполнения следующим образом:

          ...
          <configuration>
            <type>runtime</type>
            <properties>
              <cargo.runtime.args>force=true</cargo.runtime.args>
              <cargo.hostname>${hostname}</cargo.hostname>
              <cargo.remote.username>${username}</cargo.remote.username>
              <cargo.remote.password>${password}</cargo.remote.password>
            </properties>
          </configuration>
          ...

Очевидно, груз выполняет развертывание, а не передислокацию.

Другой способ, который работает для меня, это использование maven-glassfish-plugin, я правильно настроил плагин и оставил pom в качестве выполнения повторного развертывания.

    <execution>
            <id>gf-deploy</id>
            <phase>package</phase>
            <goals>
                <goal>redeploy</goal>
            </goals>
        </execution>

затем я изменил файл asadmin.bat, и после строк, в которых скрипт вызывает файл appserver-cli.jar, я добавил несколько строк и заметил, что повторное развертывание вызывает команду undeploy и deploy, поэтому хитрость плагина maven glassfish здесь заключается в печати что-то, когда запускается команда undeploy (Tihs будет путать плагин maven, как если бы команда undeploy всегда была успешной), но когда команда asadmin развернута, поток будет работать нормально.

: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

после этой модификации reploy всегда работает так здорово!

Возможно, вам потребуется настроить нового пользователя-администратора сервера Glassfish в области администратора. Проверьте следующее http://beforeuquit.blogspot.com/

Другие вопросы по тегам