1

我们拥有一个作为 EAR 部署给客户的企业应用程序。在这个客户端中,有一个 web-app 模块,我们的 web 开发者希望在没有完整 EAR 重新部署的情况下对其进行测试,这(作为记录)意味着以下步骤

  1. 将 webapp 打包成一场战争
  2. 将战争包装在耳边
  3. 在 Glassfish 中完全安装 ear(使用所有 EJB、Web 服务,......重新部署)

这些步骤由 maven 驱动,并且由于各种测试,通常需要大约 200 万。这是一个很长的延迟。但是,我们如何为 Web 开发减少它呢?JRebel 已尝试过,但结果喜忧参半:大多数情况下它都可以正常工作,但在某些(我没有调查过)情况下,它也可能会阻止开发人员。

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

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

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

4

1 回答 1

2

为什么每次都要用maven重新打包war和ear?您使用 eclipse 的动态 Web 项目吗?(其实我不知道它是否符合你的要求,你可能已经很了解了,但没有足够的声誉来询问细节)。

使用 maven 生成一个草稿 WEBAPP

mvn archetype:generate -DgroupId=org.yourgroup -DartifactId=MavenTestWebapp -DarchetypeArtifactId=maven-archetype-webapp

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

War 目录是项目的一个模块。我添加了一个 JavaSources 目录以使其清晰。我还在 War 目录中添加了一个 pom.xml,以便处理来自父项目的依赖库。以下是 War 目录中 pom 的示例:

<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 compile命令。然后在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 的动态 Web 项目将允许在 glassfish 上快速重新部署 java 类。

创建一个动态的 WEB 项目

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

这个 webapp 包含你的 web 开发人员必须处理、编译和部署的所有类。它还包含一个带有库和编译类的完整战争模块。

创建一个耳朵

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

在 glassfish 上部署 EAR

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

谢谢

如果有更好的解决方案,如果它可以改进或者它不适合您的项目,请告诉我们。我没有那么多经验,但我以前一直在使用这种配置,它可能适用于快速重新部署您的 java 源。谢谢,@+

于 2013-04-16T09:21:25.043 回答