部署2个应用程序的maven-embedded-glassfish-plugin

时间:2012-02-14 16:23:59

标签: integration-testing glassfish-3 web-deployment

我有以下用例: 我正在使用Spring MVC实现一个使用Spring WS实现的Web服务的Web应用程序。

项目使用maven作为构建工具。 现在我想实现Web应用程序的集成测试。 为此,我想使用maven-embedded-glassfish-plugin。 我在pom.xml中有以下maven配置:

    <plugin>
    <groupId>org.glassfish</groupId>
    <artifactId>maven-embedded-glassfish-plugin</artifactId>
        <version>3.1.1</version>
        <configuration>
           <goalPrefix>embedded-glassfish</goalPrefix>
           <app>${basedir}/target/web-app.war</app>

           <autoDelete>true</autoDelete>
           <port>8080</port>
           <name>web-app</name>

           <configFile>src/test/resources/glassfish/domain.xml</configFile>
        </configuration>

        <executions>
           <execution>
              <id>start-glassfish</id>
              <phase>pre-integration-test</phase>
              <goals>
                 <goal>start</goal>
              </goals>
           </execution>
           <execution>
              <id>glassfish-deploy</id>
              <phase>pre-integration-test</phase>
              <goals>
                 <goal>deploy</goal>
              </goals>
           </execution>
           <execution>
              <id>glassfish-undeploy</id>
              <phase>post-integration-test</phase>
              <goals>
                 <goal>undeploy</goal>
              </goals>
           </execution>
           <execution>
              <id>stop-glassfish</id>
              <phase>post-integration-test</phase>
              <goals>
                 <goal>stop</goal>
              </goals>
           </execution>
        </executions>
      </plugin> 

一切正常。 但现在我需要添加webservice.war文件的部署。 在这一刻,这不是我的pom的依赖。 我只有一个存根类来调用web-app.war应用程序中定义的Web服务。

那么如何部署第二个应用程序有什么好的解决方案呢?

我想自动成为某种东西,可能会使用maven存储库,因为如果我进行修改,我想自动使用新版本的Web服务。

2 个答案:

答案 0 :(得分:3)

我在users@embedded-glassfish.java.net和Mister Bhavani Shankar的帮助下找到了以下解决方案:

  <execution>
      <id>glassfish-additional_deployments</id>
      <phase>pre-integration-test</phase>
      <goals>
       <goal>admin</goal>
      </goals>
      <configuration>
        <commands>
          <param>deploy ${basedir}/src/test/resources/integrationtest/app-ws.war</param>
        </commands>
      </configuration>
  </execution>

从理论上讲,你可以在war的maven中设置依赖关系,然后从lib目录中部署war文件。

有关此插件的一些有趣内容,如果有人想使用该选项:

    <instanceRoot>${project.build.directory}/glassfish</instanceRoot>

仅在使用现有glassfish安装的版本3.1.1中不起作用。 如果你想设置这个属性,那么使用(没有安装glassfish):

      <systemProperties>
        <property>glassfish.embedded.tmpdir=target/glassfish</property>
      </systemProperties>

答案 1 :(得分:0)

对于maven-embedded-glassfish-plugin的3.1.1版本,你只需要将“glassfish.embedded.tmpdir”属性设置为一个静态值(对于windows os,但是我我不确定linux)。因为maven无法转换路径。

我正在为一条玻璃鱼配置一只耳朵,这对我来说非常适合。

我的配置是:

    <plugin>
            <groupId>org.glassfish</groupId>
            <artifactId>maven-embedded-glassfish-plugin</artifactId>
            <version>3.1.1</version>
            <configuration>
                <systemProperties>
                    <property>glassfish.embedded.tmpdir=target/glassfish</property>
                </systemProperties>
                <app>${project.build.directory}/${build.finalName}.ear</app>
                <autoDelete>true</autoDelete>
                <port>8080</port>
                <contextRoot>test</contextRoot>
            </configuration>
            <executions>
                <execution>
                    <id>start-glassfish</id>
                    <phase>install</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>

但如果删除<property>glassfish.embedded.tmpdir=target/glassfish</property>

,这真的很有趣

部分然后启动服务器,它正在缓慢加载项目并且它不稳定。