-->

在Maven2:为企业项目的最佳实践(EAR文件)在Maven2:为企业项目的最佳实践(EAR文件)

2019-06-14 15:40发布

我只是从蚂蚁切换到Maven和我试图找出建立基于企业项目EAR文件的最佳实践?

比方说,我想创建与EJB组件,Web层和封装EAR文件WAR文件jar文件相当标准的项目,与相应的部署描述符。

我会怎么做呢? 创建项目archetypeArtifactId=maven-archetype-webapp与war文件,并从那里延伸? 什么是对此最好的项目结构(与POM文件示例)? 你在哪里贴耳朵文件相关部署描述符,等等?

谢谢你的帮助。

Answer 1:

您创建一个新的项目。 新项目是您EAR程序集项目,其中包含您两个依赖于您的EJB项目和你的战争计划。

所以,你实际上有三个Maven项目。 一个EJB。 一场战争。 一只耳朵,这两个部分拉在一起,并创建了耳朵。

部署描述符可以由行家来产生,或放在EAR项目结构的资源目录内。

Maven的入耳式插件是你用什么来进行配置,并且该文件是好的,但不是很清楚,如果你还在搞清楚一般如何Maven的作品。

因此,作为一个例子,你可能会做这样的事情:

<?xml version="1.0" encoding="utf-8"?>
<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>
  <groupId>com.mycompany</groupId>
  <artifactId>myEar</artifactId>
  <packaging>ear</packaging>
  <name>My EAR</name>

  <build>
    <plugins>
      <plugin>
        <artifactId>maven-compiler-plugin</artifactId>
        <configuration>
          <source>1.5</source>
          <target>1.5</target>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-ear-plugin</artifactId>
        <configuration>
          <version>1.4</version>
          <modules>
            <webModule>
              <groupId>com.mycompany</groupId>
              <artifactId>myWar</artifactId>
              <bundleFileName>myWarNameInTheEar.war</bundleFileName>
              <contextRoot>/myWarConext</contextRoot>
            </webModule>
            <ejbModule>
              <groupId>com.mycompany</groupId>
              <artifactId>myEjb</artifactId>
              <bundleFileName>myEjbNameInTheEar.jar</bundleFileName>
            </ejbModule>
          </modules>
          <displayName>My Ear Name displayed in the App Server</displayName>
          <!-- If I want maven to generate the application.xml, set this to true -->
          <generateApplicationXml>true</generateApplicationXml>
        </configuration>
      </plugin>
      <plugin>
        <artifactId>maven-resources-plugin</artifactId>
        <version>2.3</version>
        <configuration>
          <encoding>UTF-8</encoding>
        </configuration>
      </plugin>
    </plugins>
    <finalName>myEarName</finalName>
  </build>

  <!-- Define the versions of your ear components here -->
  <dependencies>
    <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>myWar</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>war</type>
    </dependency>
    <dependency>
      <groupId>com.mycompany</groupId>
      <artifactId>myEjb</artifactId>
      <version>1.0-SNAPSHOT</version>
      <type>ejb</type>
    </dependency>
  </dependencies>
</project>


Answer 2:

什么帮助了我很多是运行Maven原型:生成目标,并从原型,其中一些似乎是定期更新(特别是JBoss的似乎是很好的维护)的一个选择。

mvn archetype:generate

数以百计的原型出现在从中选择一个编号列表(519的吧!)。 我们的目标,仍然在运行,提示我输入一个数字或输入一个搜索字符串例如进行选择:

513: remote -> org.xwiki.commons:xwiki-commons-component-archetype
514: remote -> org.xwiki.rendering:xwiki-rendering-archetype-macro
515: remote -> org.zkoss:zk-archetype-component
516: remote -> org.zkoss:zk-archetype-webapp
517: remote -> ru.circumflex:circumflex-archetype (-)
518: remote -> se.vgregion.javg.maven.archetypes:javg-minimal-archetype (-)
Choose a number or apply filter (format: [groupId:]artifactId, case sensitive contains):

我输入的搜索字符串的“耳朵”,这名单缩小到只有8个项目(今天的):

Choose archetype:
1: remote -> org.codehaus.mojo.archetypes:ear-j2ee14 (-)
2: remote -> org.codehaus.mojo.archetypes:ear-javaee6 (-)
3: remote -> org.codehaus.mojo.archetypes:ear-jee5 (-)
4: remote -> org.hibernate:hibernate-search-quickstart (-)
5: remote -> org.jboss.spec.archetypes:jboss-javaee6-ear-webapp 
6: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-ear-archetype
7: remote -> org.jboss.spec.archetypes:jboss-javaee6-webapp-ear-archetype-blank
8: remote -> org.ow2.weblab.tools.maven:weblab-archetype-searcher

我选择了“org.jboss.spec.archetypes:JBoss的-javaee6入耳式web应用”(通过输入在该例子中选择“5”)。

接下来,我们的目标让我进入的groupId,artifactId的,包名称等,然后生成以下证据充分的示例应用程序:

[pgarner@localhost Foo]$ tree
.
|-- Foo-ear
|   `-- pom.xml
|-- Foo-ejb
|   |-- pom.xml
|   `-- src
|       |-- main
|       |   |-- java
|       |   |   `-- com
|       |   |       `-- foo
|       |   |           |-- controller
|       |   |           |   `-- MemberRegistration.java
|       |   |           |-- data
|       |   |           |   `-- MemberListProducer.java
|       |   |           |-- model
|       |   |           |   `-- Member.java
|       |   |           `-- util
|       |   |               `-- Resources.java
|       |   `-- resources
|       |       |-- import.sql
|       |       `-- META-INF
|       |           |-- beans.xml
|       |           `-- persistence.xml
|       `-- test
|           |-- java
|           |   `-- com
|           |       `-- foo
|           |           `-- test
|           |               `-- MemberRegistrationTest.java
|           `-- resources
|-- Foo-web
|   |-- pom.xml
|   `-- src
|       `-- main
|           |-- java
|           |   `-- com
|           |       `-- foo
|           |           `-- rest
|           |               |-- JaxRsActivator.java
|           |               `-- MemberResourceRESTService.java
|           `-- webapp
|               |-- index.html
|               |-- index.xhtml
|               |-- resources
|               |   |-- css
|               |   |   `-- screen.css
|               |   `-- gfx
|               |       |-- banner.png
|               |       `-- logo.png
|               `-- WEB-INF
|                   |-- beans.xml
|                   |-- faces-config.xml
|                   `-- templates
|                       `-- default.xhtml
|-- pom.xml
`-- README.md

32 directories, 23 files

读四个POM文件,这是良好注释后,我几乎所有我需要的信息。

./pom.xml
./Foo-ear/pom.xml
./Foo-ejb/pom.xml
./Foo-web/pom.xml


Answer 3:

我已经做了GitHub的仓库,以显示我认为是一个很好的(或最佳实践)启动项目结构...

https://github.com/StefanHeimberg/stackoverflow-1134894

一些关键字:

  • Maven的3
  • BOM(自己的依赖的DependencyManagement)
  • (来自外部的依赖和PluginManagement全球项目配置DependencyManagement)母公司对所有项目
  • JUnit的/的Mockito / DBUnit的
  • 没有WEB-INF清洁战争项目/ lib中,因为依赖是在EAR / lib文件夹中。
  • 清洁耳朵项目。
  • 对Java EE7最小的部署描述符
  • 没有本地EJB接口,因为@LocalBean就足够了。
  • 通过行家用户属性最小行家配置
  • 实际部署描述的Servlet 3.1 / 3.2 EJB / JPA 2.1
  • macker - Maven的插件的使用,检查建筑规则
  • 集成测试启用,但跳过。 (skipITs = FALSE)有用,使CI生成服务器上

Maven的输出:

Reactor Summary:

MyProject - BOM .................................... SUCCESS [  0.494 s]
MyProject - Parent ................................. SUCCESS [  0.330 s]
MyProject - Common ................................. SUCCESS [  3.498 s]
MyProject - Persistence ............................ SUCCESS [  1.045 s]
MyProject - Business ............................... SUCCESS [  1.233 s]
MyProject - Web .................................... SUCCESS [  1.330 s]
MyProject - Application ............................ SUCCESS [  0.679 s]
------------------------------------------------------------------------
BUILD SUCCESS
------------------------------------------------------------------------
Total time: 8.817 s
Finished at: 2015-01-27T00:51:59+01:00
Final Memory: 24M/207M
------------------------------------------------------------------------


Answer 4:

NetBeans IDE中自动定义这几乎类似于一个由帕特里克·加纳建议的结构。 对于用户的NetBeans

文件 - > 新建项目 - >在左侧选择Maven和在右侧选择的Maven企业应用程序 ,然后点击下一步 - >询问项目名称两种战争,EJB和设置。

IDE将自动为您创建的结构。



Answer 5:

我一直在寻找高和低一个完整的基于Maven的耳打包的应用程序的终端到终端的例子,最后偶然发现了这个 。 该指示说,选择选项2通过CLI,但你的目的运行时,使用选项1。



Answer 6:

这是maven的入耳式插件的一个很好的例子部分。

您还可以检查Maven原型是可以作为一个例子。 如果你只是欠幅MVN原型:产生你会得到可用的原型列表。 其中之一是

maven-archetype-j2ee-simple


文章来源: Maven2: Best practice for Enterprise Project (EAR file)