具有分离的前端和后端的Maven JavaEE应用程序

时间:2018-03-02 16:20:30

标签: maven java-ee

我想创建一个完全独立的FrontEndBackEnd的Java EE应用程序。我找到了一些教程,将这两个模块打包成一个EAR文件。我可以创建它,我可以将我的应用程序部署到应用程序服务器。

出于安全考虑,我现在必须单独部署FrontEnd(Tomcat)和BackEnd(Weblogic)。

我有什么:

  1. JSF页面
  2. ManagedBeans
  3. 返回:

    1. 具有业务逻辑(EJB)的Sessionbeans
    2. 实体类。
    3. 这两个层之间的通信接口将是RMI个调用。

      我有一个带有这两个模块的EAR项目的第一个解决方案正在运行,因为我的backEnd模块pom.xml包装是jar

      <packaging>jar</packaging>
      

      因此,我可以将这个构建的jar包含在我的frontEnd的类路径中,并且我的frontEnd会看到所需的类。

      现在我尝试从我的backEnd创建ear,因为使用jar打包我不能将所需的库包含到我的后端,并且它们在运行时丢失了。所以我在ear Ok中将backEnd打包更改为pom.xml,但如果我从backEnd构建EAR,那么我就不能将它包含在我的frontEnd类路径中,而且我的前端无法看到所需的类后端。

      对不起,我对此完全感到困惑。你能给我任何建议或教程,说明分离这两个模块的正确方法是什么。例如,如何使用EAR同时构建JARmaven

      非常感谢你!

4 个答案:

答案 0 :(得分:2)

试试这可能有助于你的问题.. http://maven.apache.org/plugins/maven-ear-plugin/examples/skinny-wars.html

在典型的J2EE环境中,WAR包装在EAR中以进行部署。 WAR可以在WEB-INF / lib中包含其所有依赖的JAR,但是如果存在多个WAR,则由于存在重复的JAR,EAR可以快速增长。相反,J2EE规范允许WAR通过其MANIFEST.MF中的Class-Path设置引用EAR中打包的外部JAR。

答案 1 :(得分:1)

在项目的某个地方,你应该有一个带有EJB的模块和相应的包装类型&#34; ejb&#34;。通常是&#34; ejb-client&#34;人工制品也会产生。这可以用作前端的依赖项。 前端应打包为#34; war&#34;,后端为&#34; ear&#34;。

查看相应的maven插件(EAR,WAR,EJB):

答案 2 :(得分:1)

如果您的前端在JSF中,则创建一个单独的maven项目,该项目将包含所有与UI相关的代码(css / js / * .jsf和Backing Bean),例如DemoProject-UI将是您的前端项目名称。编写所有UI这个项目中相关的事情。

现在,您的JSF页面支持bean需要与服务层进行通信。为此,创建一个单独的maven项目,例如DemoProject-Service。您可以在此项目中编写一个Web服务,该服务将由DemoProject-UI通过代理访问。 DemoProject-Service将有一个将被调用的Web服务,它将使用Spring服务/ DAO等具有后端逻辑。

根据你的问题,它询问你想要在seprate服务器上运行如DemoProject-UI将运行(Tomcat)和DemoProject-Model将运行 on(Weblogic)。现在你有2个seprate项目在2个不同的服务器上运行。

如果要将两者保存在同一台服务器上,则将第二个项目的maven依赖项添加到第一个项目,而无需使用Web服务。

答案 3 :(得分:1)

  1. 最好的方法是你可以创建模块并创建一个final 作为父pom项目,您可以从主项目部署。 所以最后一个主要项目将在构建sub之后构建 模块。

    <modelVersion>4.0.0</modelVersion>
    <parent>
        <groupId>com</groupId>
        <artifactId>practice</artifactId>
        <version>0.0.1</version>
    </parent>
    <groupId>com.xplanr</groupId>
    <artifactId>SheelBatchClient</artifactId>
    <url>http://maven.apache.org</url>
    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
        <dependency>
            <groupId>org.glassfish.jersey.core</groupId>
            <artifactId>jersey-client</artifactId>
            <version>2.22.2</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-core</artifactId>
            <version>2.6.5</version>
        </dependency>
        <dependency>
            <groupId>com.fasterxml.jackson.core</groupId>
            <artifactId>jackson-databind</artifactId>
            <version>2.6.5</version>
        </dependency>
        <dependency>
            <groupId>org.codehaus.jettison</groupId>
            <artifactId>jettison</artifactId>
            <version>1.3.8</version>
        </dependency>
    </dependencies>
    <description>Xplanr Batch Client</description>
    <name>xplanrBatchClient</name>
    
    <scm>
        <connection>scm:git:git//github.com/XplanrAnalyticsInc/XplanrMain.git</connection>
    </scm>
    
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
    
            <plugin>
                <artifactId>maven-dependency-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>prepare-package</phase>
                        <goals>
                            <goal>copy-dependencies</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${project.build.directory}/utility/XplanrBatchClient/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    
            <plugin>
                <artifactId>maven-resources-plugin</artifactId>
                <version>3.0.2</version>
                <executions>
                    <execution>
                        <id>copy-resources</id>
                        <!-- here the phase you need -->
                        <phase>validate</phase>
                        <goals>
                            <goal>copy-resources</goal>
                        </goals>
                        <configuration>
                            <outputDirectory>${basedir}/target/utility/XplanrBatchClient</outputDirectory>
                            <resources>
                                <resource>
                                    <directory>src/main/utility/XplanrBatchClient</directory>
                                    <filtering>true</filtering>
                                </resource>
                            </resources>
                            <configuration>
                                <archive>
                                    <manifest>
                                        <addClasspath>true</addClasspath>
                                    </manifest>
                                </archive>
                            </configuration>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>buildnumber-maven-plugin</artifactId>
                <version>1.4</version>
                <executions>
                    <execution>
                        <phase>validate</phase>
                        <goals>
                            <goal>create</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <format>{0,number}</format>
                    <items>
                        <item>buildNumber</item>
                    </items>
                    <doCheck>false</doCheck>
                    <doUpdate>false</doUpdate>
                    <revisionOnScmFailure>unknownbuild</revisionOnScmFailure>
                    <!-- <shortRevisionLength>5</shortRevisionLength> -->
                </configuration>
            </plugin>
    
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jar-plugin</artifactId>
                <version>2.3.1</version>
                <executions>
                    <execution>
                        <phase>package</phase>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jarName>xplanrBatchClient</jarName>
                    <version>1.0.0</version>
                    <outputDirectory>${project.build.directory}/utility/XplanrBatchClient/lib</outputDirectory>
                    <archive>
                        <manifestEntries>
                            <implementation-version>${project.version}</implementation-version>
                            <implementation-build>${buildNumber}</implementation-build>
                        </manifestEntries>
                    </archive>
                </configuration>
            </plugin>
    
        </plugins>
    </build>
    <version>1.0.0</version>
    

  2. 2. 然后你必须为主项目创建一个pom 在那里你必须提到父母,你可以在下面看到

    <parent>
        <groupId>com</groupId>
        <artifactId>practice</artifactId>
        <version>0.0.1</version>
    </parent>
    <groupId>com.practice</groupId>
    <artifactId>framework</artifactId>
    <packaging>war</packaging>
    <version>1.0.0</version>
    <name>DAG Maven Webapp</name>
    <url>http://www.practiceanalytics.com/</url>
    <repositories>
        <repository>
            <id>practice</id>
            <name>framework</name>
            <url>file://libs</url>
        </repository>
        <repository>
          <id>cloudera</id>
          <url>https://repository.cloudera.com/artifactory/cloudera-repos/</url>
          <releases>
                <enabled>true</enabled>
            </releases>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    
    </repositories>
    <dependencies>
    
    
    </dependencies>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>2.2</version>
                <configuration>
                    <source>1.8</source>
                    <target>1.8</target>
                </configuration>
            </plugin>
    
            <plugin>
                <artifactId>maven-jar-plugin</artifactId>
                <executions>
                    <execution>
                        <id>default-jar</id>
                        <goals>
                            <goal>jar</goal>
                        </goals>
                        <configuration>
                            <classifier>client</classifier>
                            <finalName>udf-framework</finalName>
                            <includes>
                                <include>**/udf/*</include>
                            </includes>
                            <outputDirectory>${project.build.directory}/udf/lib</outputDirectory>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
    
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-war-plugin</artifactId>
                <version>2.6</version>
                <configuration>
                    <!-- <archiveClasses>true</archiveClasses>
                    <webresources>
                        <resource>
                            <directory>src/main/resources</directory>
                            <targetpath>WEB-INF/classes</targetpath>
                            <filtering>true</filtering>
                        </resource>
                    </webresources>
                    <warName>${project.war.name}</warName>
                    <warSourceExcludes>**/*.class</warSourceExcludes> -->
                    <archive>
                        <manifest>
                            <addClasspath>true</addClasspath>
                        </manifest>
                    </archive>
                </configuration>
            </plugin>
        </plugins>
        <finalName>framework</finalName>
    </build>
    <description>Web Project for Practice Code</description>