日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程语言 > java >内容正文

java

针对新手的Java EE7和Maven项目-第4部分-定义Ear模块

發布時間:2023/12/3 java 34 豆豆
生活随笔 收集整理的這篇文章主要介紹了 针对新手的Java EE7和Maven项目-第4部分-定义Ear模块 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

從前面的部分恢復

第1部分
第2部分
第3部分

我們正在恢復第四部分,目前我們的簡單項目有

  • Web Maven模塊(戰爭)
  • 一個ejb模塊(ejb),其中包含我們的無狀態會話bean(EJB 3.1)
  • 第二個(ejb)模塊包含我們的實體bean(JPA2)

但是我們仍然缺少將它們打包的所有文件,即“ 耳朵”類型的文件(也稱為Enterprise Archive) 。

定義我們的耳朵Maven模塊

正如您在下圖中所看到的,我們在sample-parent下創建了一個名為sample-ear的emtpy文件夾。 該文件夾需要有一個pom.xml文件。 我們的新模塊需要在sample-parent \ pom.xml的“ 模塊 ”部分中正確引用。

我們的ear Maven模塊的主要目的是“配置”著名的maven-ear-plugin ,它將由maven調用并將產生最終的可部署應用程序。

我們需要做2件事,添加maven-ear-plugin的配置,并在ear模塊上添加我們的“ internal ”應用程序依賴項,以便它“知道”應該查找哪些模塊。 我們來看一下:

內耳pom.xml

<build><finalName>sampleapp</finalName><plugins><!--Ear plugin -creating the ear - watch out skinny WARS!--><plugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-ear-plugin</artifactId><configuration><finalName>sampleapp</finalName><defaultJavaBundleDir>lib/</defaultJavaBundleDir><skinnyWars>true</skinnyWars><modules><webModule><groupId>gr.javapapo</groupId><artifactId>sample-web</artifactId></webModule><ejbModule><groupId>gr.javapapo</groupId><artifactId>sample-services</artifactId></ejbModule></modules></configuration></plugin></plugins></build>

這是構建部分,請注意以下事項:

  • 請記住,因為我們沒有其他模塊,我們定義了一些基本的常用的配置為我們的插件,在“ 父 ” POM。 返回并查看已經為您準備的內容。
  • 請注意“ defaultJavaBundleDir ”,在這里我們定義所有庫的位置(除了將駐留在我們耳朵中的頂級模塊之外,通常是耳朵中的一個子文件夾,稱為“ lib”)。
  • 什么是頂級模塊? 實際上,是將瓶子和戰爭包裝在耳朵里,被認為是第一級公民,正如您所看到的,我們定義了2,樣本網絡和樣本服務。
  • 注意“ skinnyWars ”屬性。 啟用此開關后, 我們將根據我們的war項目引用的第三方庫強制執行某種打包模式 。 簡而言之,我們的戰爭歸檔文件不會在WEB-INF \ lib文件夾下包含任何我們可能定義為依賴項的外部庫,而是所有這些庫,它們將被包裝在耳邊的“ defaultJavaBundleDir ”路徑中。

如果不添加耳掛的“依賴關系”部分,以上配置將無法正常工作。

<!-- our in app dependencies--><dependencies><dependency><groupId>gr.javapapo</groupId><artifactId>sample-web</artifactId><version>${project.version}</version><type>war</type></dependency><dependency><groupId>gr.javapapo</groupId><artifactId>sample-services</artifactId><version>${project.version}</version><type>ejb</type></dependency></dependencies>

記下以下內容:

  • 此pom中的dependency元素需要'type'屬性。

您可能有一個很好的問題,樣本域(jar)模塊在哪里?

嗯,這個模塊在我們的耳邊不會被提升為頂層元素,因為我們將其添加為對sample-services模塊的依賴。 因此,我們的服務將依賴于實體bean的模塊。 (聽起來很公平)。 因此,我們需要更新示例服務模塊的pom.xml。

<artifactId>sample-services</artifactId><name>sample-services</name> <description>EJB service layer</description><packaging>ejb</packaging><dependencies><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId></dependency><dependency><groupId>gr.javapapo</groupId><artifactId>sample-domain</artifactId><version>${project.version}</version></dependency></dependencies></project>

通過這樣做,sample-services.jar將沿著sample-domain.jar“獲取”。 默認情況下(請記住,Maven都是關于約定的),當我們為耳朵定義一個頂級模塊時,就像樣本服務一樣,它的依賴項會自動捆綁在耳朵的defaultJavaBundleDir庫下! 因此,當我們打包耳朵時,我們將期望看到打包的sample-domain jar。

再缺少一個依賴

在服務模塊和實體模塊之間的第一個應用程序內依賴之后,我們需要另一個。 我們的戰爭模塊(Web層)將使用我們的一些服務,但是為了能夠做到這一點,需要依賴于“服務”模塊。 因此,我們需要相應地在sample-web項目上使用pom.xml。

<packaging>war</packaging><build><finalName>${project.artifactId}</finalName></build><dependencies><dependency><groupId>javax</groupId><artifactId>javaee-api</artifactId><scope>provided</scope></dependency><dependency><groupId>gr.javapapo</groupId><artifactId>sample-services</artifactId><version>0.0.1-SNAPSHOT</version></dependency></dependencies>

讓我們打包戰爭吧。

現在我們已經準備好,已經設置了基本依賴項,已經配置了我們的耳朵,只需要打包即可。 在命令行的sample-parent文件夾級別下,我們只需要輸入:

mvn清潔包裝

我們完成了,讓我們檢查sample-ear模塊的“ target”文件夾下。 我們的最后一只耳朵已經準備好了,maven還創建了耳朵的“ 分解 ”版本(在下圖中展開)。 注意我們的兩個頂級耳朵元素,以及sample-domain.jar如何位于我們耳朵的“ lib”文件夾下。 還請注意,lib文件夾中未包含某些基本庫,例如javaee-api.jar。 由于我們已經在pom中添加了提供的內容。 (請參閱xml的最終版本)。

最后一件事……皮包骨頭的戰爭和MANIFEST.MF文件

最終,我們可以在這里停下來,我們的最后一只耳朵可以正常工作,但是在上述所有配置下,尤其是在我們偏好進行皮包骨頭的戰爭的情況下,我們需要注意一個小細節。 MANIFEST文件是jar和wars中的特殊描述符,供應用程序服務器在耳朵內的類路徑中查找和類加載“相關” jar時使用。

我們的小問題存在于sample-web.war的MANIFEST.MF文件中。 如果解壓縮生成的war文件,并使用文本編輯器MANIFEST.MF打開,我們將看到類似的內容。

Manifest-Version: 1.0Built-By: papoBuild-Jdk: 1.7.0_45Class-Path: lib/sample-services-0.0.1-SNAPSHOT.jar lib/sample-services-0.0.1-SNAPSHOT.jar lib/sample-domain-0.0.1-SNAPSHOT.jarCreated-By: Apache Maven 3.2.1Archiver-Version: Plexus Archiver

你能發現錯誤嗎? 默認情況下,生成的MANIFEST.MF為我們的頂級ejb jars(sample-services)指示錯誤的路徑。 我們的sample-services.jar不在耳朵的\ lib下,而是頂級元素。 那么我們如何創建正確的清單?

最終,我們需要對Maven-war插件進行一些微調。 我們需要覆蓋父pom中指定的默認行為,并為此特定依賴項指定正確的條目。 如果碰巧有多個jar,則需要在配置中附加所有作為頂級元素的jar(確保正確執行,在條目之間使用空格)。因此在sample-war pom中,我們需要在所應用的配置之上添加一些配置(額外)。 參見下圖。

有一個有趣的stackoverflow問題 ,您可以有關此的知識,小技巧或其他可能的解決方法,以防您使用骨瘦如柴的戰爭。

就是這樣,我們的耳朵已經準備好了。

摘要

您可以在Git Tag中找到此文章的最終版本。本文將完成從頭開始,應用基本的Maven原理并為Java企業應用程序創建一些基本的Maven模塊的系列文章。 請隨意重用此示例并對其進行擴展,以滿足您自己的需求。 就滿足您的所有需求而言,它是完整的,但它是在Maven中入門,思考和配置的可靠示例。

我將在此示例中進行擴展,在以后的文章中添加更多的模塊并使用maven的更多功能。

翻譯自: https://www.javacodegeeks.com/2014/06/java-ee7-and-maven-project-for-newbies-part-4-defining-the-ear-module.html

總結

以上是生活随笔為你收集整理的针对新手的Java EE7和Maven项目-第4部分-定义Ear模块的全部內容,希望文章能夠幫你解決所遇到的問題。

如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。