2013-04-15 21 views
1

我们无法将作为EAR部署的企业应用程序部署到客户端。 在这个客户端,有一个web应用模块,我们webd eveloppers想没有一个完整的EAR重新部署,这(备案)意味着以下步骤如何在Glassfish中更快地在EAR中测试WAR代码?

  1. 包装在Web应用中的权重,以测试战争
  2. 包装的战争在耳边
  3. 安装在Glassfish的耳朵完全(所有的EJB,Web服务,...调动)

这些步骤被行家驱动,由于各种测试通常需要2mn左右。这是一个很长的延迟。 但是,我们如何才能减少它的网络发展? JRebel已经被尝试过了,但是它显示了不同的结果:大多数时候它运行正常,但它也可能阻止某些开发者(并非由我发起)的情况。

我曾考虑允许将战争与EAR分开安装,但我想它可能会引入更大的开发工作。

是否可以通过将webapp文件夹链接到Glassfish hotdeploy之一来允许自动重新部署代码?

编辑1显然,我的WAR Web组件依赖于EJB和EAR的一些库。在这种情况下,我该如何快速部署/自动部署该WAR?

+0

这取决于你的项目结构。如果您的WAR没有任何与EAR lib文件夹或EJB的依赖关系,则应该单独部署WAR(或特定的Web项目)。如果存在依赖关系,则可能必须分开部署EJB。 – unwichtich

回答

2

为什么每次都要用maven重新打包战争和耳朵呢?你使用eclipse的动态web项目吗? (我其实不知道它是否符合你的要求,你可能已经知道一切,但没有足够的声誉来要求详细信息)。

生成与行家一个WEBAPP草案

MVN原型:生成-DgroupId = org.yourgroup -DartifactId = MavenTestWebapp -DarchetypeArtifactId =行家-原型-web应用

MavenTestWebapp 
| 
\--- JavaSources 
|  \MyClass.java 
| 
\--- War 
| | ---(pom.xml) 
| \ --- src 
|   \ --- main 
|    \ --- webapp 
|      | --- META-INF 
|      \ --- WEB-INF 
| 
\(pom.xml) 

战争目录是一个该项目的模块。我添加了一个JavaSources目录来清除它。我还在War目录中添加了一个pom.xml,以便处理父项目中的依赖项库。下面是在战争目录中的聚甲醛的例子:

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 

    <parent> 
     <groupId>org.yourgroup</groupId> 
     <artifactId>MavenTestWebapp</artifactId> 
     <version>1.0-SNAPSHOT</version> 
     <relativePath>../pom.xml</relativePath> 
    </parent> 

    <groupId>${project.parent.groupId}</groupId> 
    <artifactId>${project.parent.artifactId}-war</artifactId> 
    <name>${project.parent.artifactId}-war</name> 
    <packaging>war</packaging> 
    <version>1.0-SNAPSHOT</version> 
    <url>http://maven.apache.org</url> 
    <build> 
     <finalName>MavenTestWebapp-war</finalName> 
     <plugins> 
      <plugin> 
       <artifactId>maven-war-plugin</artifactId> 
       <version>2.1.1</version> 
       <executions> 
        <execution> 
         <phase>compile</phase> 
         <goals> 
          <goal>inplace</goal> 
         </goals> 
        </execution> 
       </executions> 
       <configuration> 
        <archiveClasses>true</archiveClasses> 
        <warSourceDirectory>${basedir}/src/main/webapp/</warSourceDirectory> 
        <dependentWarExcludes> 
         WEB-INF/classes/,META-INF/**,WEB-INF/web.xml,**/*.jar,pom.xml 
        </dependentWarExcludes> 
        <warSourceExcludes>/src/main/webapp/,target/,WEB-INF/classes/**/*.*</warSourceExcludes> 
        <webResources> 
         <resource> 
          <!-- this is relative to the pom.xml directory --> 
          <directory>${basedir}</directory> 
          <!-- the list has a default value of ** --> 
          <includes> 
          <include>pom.xml</include> 
          </includes> 
         </resource> 
        </webResources> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

为了收集依赖库,执行MVN编译命令。然后在webapp/WEB-INF目录中创建lib目录。

MavenTestWebapp 
| 
\--- JavaSources 
|  \MyClass.java 
| 
\--- War 
| | ---(pom.xml) 
| \ --- src 
|   \ --- main 
|    \ --- webapp 
|      | --- META-INF 
|      \ --- WEB-INF 
|       \ --- libs 
|         | --- dependency-lib1.jar 
|         \ --- dependency-lib2.jar 
| 
\(pom.xml) 

这是我们最后一次使用maven,直到我们在真正的包装之前运行junit测试和其他功能。但目前,我们只需要编译和部署Java类进行测试(对吧?)。 Eclipse的Dynamic Web Projects将允许在glassfish上快速重新部署Java类。

创建动态Web项目

创建工作区中的新的动态Web项目。在Web模块配置步骤中,将JavaSources设置为此项目的Java源代码目录。作为内容目录设置webapp

此webapp包含您的web开发人员必须处理,编译和部署的所有类。它还包含一个带有库和编译类的完整的war模块。

创建EAR

在工作区中创建一个新的企业应用程序项目。添加webapp作为这个项目的一个模块。

部署到GlassFish中

在服务器视图中的EAR,右键单击GlassFish服务器,并添加含有MavenTestWebapp Web模块新创建的EAR。每次修改java类时,都要将此EAR发布到您的服务器。您可以允许自动发布,但通常很烦人。

THANKS

如果有一个更好的解决方案,如果它可以改进,或者如果它不适合你的项目,让我们遇到了才知道。我没有那么多的经验,但是我之前一直在使用这种配置,并且它可能适用于快速重新部署Java源代码。谢谢,@ +

相关问题