【问题标题】:GlassFish 3 + Maven + remote deployGlassFish 3 + Maven + 远程部署
【发布时间】:2011-09-21 12:02:14
【问题描述】:

我找不到任何关于如何通过类似 maven 的方式将基于 Maven 的简单项目部署到远程 GlassFish 服务器的明确答案

mvn package xxx:deploy

我认为只有 cargo 插件支持 GlassFish 3。对吗?

我在配置方面有问题。

任何示例远程 GlassFish 部署都会很棒。 Cargo 不是必须的,如果其他人支持远程 GlassFish,我们也可以使用它。

【问题讨论】:

    标签: maven glassfish glassfish-3 cargo


    【解决方案1】:

    如果您只想使用 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-plugin 添加到您的配置文件列表中:

    <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(因为我们在插件的执行部分中添加了目标部署)

    使用上面的模型,您可以为每个环境(dev、acc、tst、prd)创建不同的配置文件,并使用不同的设置。例如,您可以创建一个开发人员配置文件,其中使用本地 glassfish 来部署和运行单元/集成测试。

    人们常犯的错误是将执行远程部署的机器的设置与要安装部署的主机混为一谈。 glassfishDirectory 是您运行部署插件的地方。由于错误插件只是挂起,什么都不做,只是等待给人一种正在发生的印象。另一个错误是为远程部署指定密码文件而不是密码,这也将导致任何结果。

    【讨论】:

    • 注意:这需要在您的 Maven 构建之外安装 Glassfish。
    • 好的,据我所知,这要求您可以在“glassfishDirectory”指定的目录下访问 asadmin。这实际上根本没有帮助,因为问题是关于部署到 remove 服务器实例。我能够做到这一点的唯一方法是使用将工件复制到远程服务器的 ant(或其他)脚本,然后通过 SSH 在那里执行 asadmin。这是一个很大的痛苦。
    【解决方案2】:

    据我所知和可以找到的,只有 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 和 Bob 是您的叔叔。

    【讨论】:

    • 为什么你的deployment-client 版本是3.2-b06?
    • @Snekse 不是一个特别的原因:它当时有效。老实说,我还没有检查过更新的配置
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-10-16
    • 2023-03-31
    • 2011-07-26
    • 1970-01-01
    相关资源
    最近更新 更多