GlassFish 3 + Maven + удаленное развертывание - PullRequest
8 голосов
/ 21 сентября 2011

Я не смог найти четкого ответа о том, как развернуть простой проект на основе Maven на удаленном сервере GlassFish через maven, например

mvn package xxx:deploy

Я думаю, что только грузовой плагин поддерживает GlassFish 3. Верно?

У меня проблемы на стороне конфигурации.

Подойдет любой пример удаленного развертывания GlassFish. Cargo не обязателен, если другие поддерживают удаленный GlassFish, мы также можем использовать его.

Ответы [ 2 ]

7 голосов
/ 05 октября 2012

Если вы хотите использовать только maven-glassfish-plugin (скажем, версия 2.1), вы можете выполнить удаленное развертывание, указав параметр "host". Ниже приведен пример, где конфигурации настраиваются в maven settings.xml, и плагин загружает их, используя профиль:

В файле settings.xml определите профиль:

<profile>
     <id>production-config</id>    
     <properties>
       <glassfish.glassfishDirectory>/var/local/glassfish/</glassfish.glassfishDirectory>
       <glassfish.user>admin</glassfish.user>
       <glassfish.adminPassword>adminadmin</glassfish.adminPassword>
       <glassfish.domain.name>prd-domain</glassfish.domain.name>
       <glassfish.domain.host>NAMEOFYOURREMOTEHOST</glassfish.domain.host>
       <glassfish.domain.adminPort>10161</glassfish.domain.adminPort>
       .
       .
     </properties> 
</profile>

Далее поместите этот профиль в ваши активные профили:

<activeProfiles>
    <activeProfile>production-config</activeProfile>
</activeProfiles>

В вашем проекте maven pom.xml создайте профиль и добавьте плагин maven-glassfish в ваш список профилей:

<profile>
    <id>production</id>
    <activation>
     <activeByDefault>false</activeByDefault>
     <os>
    <arch>x86</arch>
    <family>linux</family>
     </os>
     <property>
    <name>profile</name>
    <value>production</value>
     </property>
     <file>
      <exists>
       ${glassfish.glassfishDirectory}/domains/${glassfish.domain.name}/config/domain.passwords
      </exists>
     </file>
   </activation>
   <build>
      <plugins>
          <plugin>
               <groupId>org.glassfish.maven.plugin</groupId>
               <artifactId>maven-glassfish-plugin</artifactId>
               <configuration>
                  <terse>true</terse>
                  <echo>true</echo>
                  <debug>true</debug>
                  <glassfishDirectory>${glassfish.glassfishDirectory}</glassfishDirectory>
                  <user>${glassfish.user}</user>
                  <adminPassword>${glassfish.adminPassword}</adminPassword>
                  <domain>
                     <name>${glassfish.domain.name}</name>
                     <host>${glassfish.domain.host}</host>
                     <adminPort>${glassfish.domain.adminPort}</adminPort>
                  </domain>
                  <components>
                    <component>
                      <name>${project.artifactId}</name>  
                 <artifact>${project.build.directory}/${project.build.finalName}.war</artifact>
                    </component>
                  </components>
               </configuration>
               <executions>
                    <execution>
                <goals>
            <goal>deploy</goal>
            </goals>
            </execution>
        </executions>
         </plugin>
      </plugins>
    </build>
</profile>

Это должно сработать. Вы можете запустить этот профиль, используя maven: mvn glassfish: deploy -P production или просто mvn deploy -P production (так как мы добавили цель deploy в части выполнения плагина)

Используя вышеописанную модель, вы можете создавать разные профили для каждой среды (dev, acc, tst, prd) и использовать разные настройки. Например, вы можете создать профиль разработчика, в котором для развертывания и запуска модульных / интеграционных тестов используется локальная стеклянная рыба.

Распространенная ошибка, которую делают люди, заключается в том, что они смешивают настройки компьютера, с которого вы выполняете удаленное развертывание, с хостом, на котором должно быть установлено развертывание. glassfishDirectory - это место, откуда вы запускаете плагин развертывания. В результате ошибки плагин просто зависает, ничего не делает и просто ждет, создавая впечатление, что что-то происходит. Другая ошибка - указать файл пароля вместо пароля для удаленного развертывания, что также ничего не даст.

6 голосов
/ 23 сентября 2011

Насколько я знаю и мог найти, только Cargo доставляет (или развертывает, в данном случае).

Это пример, протестированный как работающий над проектом Maven OSGi WAR:

<build>
    <plugins> 
        ...
        <plugin>
            <groupId>org.codehaus.cargo</groupId>
            <artifactId>cargo-maven2-plugin</artifactId>
            <version>1.1.2</version>
            <configuration>
                <container>
                    <containerId>glassfish3x</containerId>
                    <type>remote</type>
                </container>
                <configuration>
                    <type>runtime</type>
                    <properties>
                        <cargo.hostname>myhostname</cargo.hostname>
                        <cargo.remote.username>myusername</cargo.remote.username>
                        <cargo.remote.password>mypassword</cargo.remote.password>
                    </properties>
                </configuration> 
            </configuration>
            <dependencies>
                <dependency>
                    <groupId>org.glassfish.deployment</groupId>
                    <artifactId>deployment-client</artifactId>
                    <version>3.2-b06</version>
                </dependency>
            </dependencies>
        </plugin>
    </plugins>
</build>

Как видите, хитрость заключается в зависимости deployment-client.

Ради полноты вы просто mvn package cargo:deploy и Боб - ваш дядя.

...