AntからMavenに切り替えて、EARファイルベースのエンタープライズプロジェクトをセットアップするためのベストプラクティスを見つけようとしていますか?
EJBのjarファイル、Web層のWARファイル、およびカプセル化EARファイルと、対応するデプロイメント記述子を使用して、かなり標準的なプロジェクトを作成するとします。
どうすればいいですか? warファイルと同様にarchetypeArtifactId=maven-archetype-webapp
でプロジェクトを作成し、そこから拡張しますか?これに最適なプロジェクト構造(およびPOMファイルの例)は何ですか? earファイル関連のデプロイメント記述子などはどこに貼り付けますか?
助けてくれてありがとう。
新しいプロジェクトを作成します。新しいプロジェクトは、EJBプロジェクトとWARプロジェクトの2つの依存関係を含むEARアセンブリプロジェクトです。
したがって、実際には3つのMavenプロジェクトがあります。 1つのEJB。 1つのWAR。 2つの部分を一緒に引っ張って耳を作成する1つのEAR。
デプロイメント記述子は、Mavenによって生成されるか、EARプロジェクト構造のリソースディレクトリ内に配置できます。
Maven-ear-pluginは設定に使用するものであり、 ドキュメント は適切ですが、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>
Maven archetype:generateゴールを実行し、アーキタイプの1つから選択することで大いに助かりました。アーキタイプの一部は定期的に更新されているようです(特に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):
検索文字列「ear」を入力すると、リストは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-ear-webapp」を選択しました(この例では「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
よくコメントされた4つのPOMファイルを読んだ後、必要な情報はほぼすべて揃っていました。
./pom.xml
./Foo-ear/pom.xml
./Foo-ejb/pom.xml
./Foo-web/pom.xml
私はgithubリポジトリを作成して、良い(またはベストプラクティス)スタートアッププロジェクトの構造と思うものを示しています...
https://github.com/StefanHeimberg/stackoverflow-1134894
一部のキーワード:
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
------------------------------------------------------------------------
NetBeans IDEは、Patrick Garnerが提案した構造とほぼ同様の構造を自動的に定義します。 NetBeansユーザーの場合
ファイル-> 新しいプロジェクト->左側でMavenを選択し、右側でMaven Enterprise Applicationを選択して押しますNext-> war、ejb、および設定の両方のプロジェクト名を要求します。
IDEは自動的に構造を作成します。
完全なMavenベースのイヤーパッケージアプリケーションのエンドツーエンドのサンプルを探して、最終的につまずきました this 。手順では、CLIを実行するときにオプション2を選択するように指示されていますが、目的にはオプション1を使用してください。
これは maven-ear-pluginの良い例 の部分です。
例として利用できる maven archetypes も確認できます。 mvn archetype:generateを実行しただけの場合、使用可能なアーキタイプのリストが表示されます。それらの1つは
maven-archetype-j2ee-simple