用Maven打包成EAR遠端部署JBoss(一)——打包及手動部署到本地
這兩天分到了一個任務,需要弄一下怎樣用Maven將我們現在的專案打成一個EAR包,然後部署到遠端JBoss中,這樣我們每次部署的時候就會方便很多,話不多說,先看下我們專案的一個大致包結構,包前面的數字表示部署之後的載入順序。
1:實體;2,3:資料庫操作封裝的EJB介面和實現;4,5:業務邏輯層EJB的介面和實現;7web層
首先我們要做的是將這些打成一個ear包,推薦網址:官網。
我先是建立了一個空的Maven Project,然後寫入以下程式碼。
<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/xsd/maven-4.0.0.xsd"> <modelVersion>4.0.0</modelVersion> <groupId>com.tgb</groupId> <artifactId>gxpt_b_ear</artifactId> <version>0.0.1-SNAPSHOT</version> <packaging>ear</packaging> <build> <plugins> <plugin> <artifactId>maven-ear-plugin</artifactId> <version>2.9</version> </plugin> </plugins> </build> </project>
如果你的pom檔案報錯,那麼安裝一下 m2e-wtp這個外掛就可以了哦~~~
這樣,一個最簡單的ear外掛就配置好了。
現在,我們將需要打包的jar以及war都寫到裡面來,如:
[...] <dependencies> <dependency> <groupId>com.tgb</groupId> <artifactId>gxpt_entity_qx</artifactId> <version>0.0.1-SNAPSHOT</version> <type>jar</type> </dependency> <dependency> <groupId>com.tgb</groupId> <artifactId>gxpt_web_qx_module</artifactId> <version>0.0.1-SNAPSHOT</version> <type>war</type> </dependency> </dependencies> [...]
然後執行mvn ear: generate-application-xml,此命令是用來生成ear中的部署描述符的。
成功後執行mvn ear:ear,不得不說一下ear:ear所處的生命週期,它其實位於的生命週期是package。也就是install之前。成功後,從target中開啟打包好的ear,我們發現除了要打包的幾個包外,這幾個包的依賴包也全在這裡面。而ear這個外掛為我們提供了一種配置:,那麼我們現在就加入以下程式碼:
<plugin> <artifactId>maven-ear-plugin</artifactId> <version>2.9</version> <configuration> <packagingIncludes>META-INF/**,**/gxpt_*.jar,**/gxpt_*.war</packagingIncludes> </configuration> </plugin>
注:上面這句話是說要將META-INF下(有application.xml等)及所有的gxpt開頭的jar、war都打包進來。
現在再來看,這樣生成的ear包如下,現在就只剩下我們需要部署的jar及war。
現在就可以部署了麼?如果真的是這樣,那麼這篇文章也就沒有必要了。我們現在將其丟進去,發現會報空指標問題,原因就是JBoss在載入jar的時候,是按照字母順序進行載入的,這樣就導致了介面的實現在介面之前載入,這樣肯定會有問題啊。
那麼如何來控制順序呢?
這裡不得不提一下給出我答案的部落格。只是這位仁兄對自己寫的程式碼關鍵部分沒有文字的說明,導致我剛開始認為他這是一個不好的文章……JBoss中的ear包中類載入順序控制。現在你可以直接看我的文章的。
需要做的其實並不多,只是在pom中對JBoss進行配置,還得將那些jar載入順序寫到application.xml檔案(用ear:generate-application-xml生成的)裡面。在這裡不進行全部列出,只列出部分及結果圖。
配置檔案:
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.9</version>
<configuration>
<packagingIncludes>META-INF/**,**/gxpt_*.jar,**/gxpt_*.war</packagingIncludes>
<jboss>
<version>5</version>
<module-order>strict</module-order>
</jboss>
<modules>
<jarModule>
<groupId>com.tgb</groupId>
<artifactId>gxpt_entity_qx</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
[...]
</modules>
</configuration>
</plugin>
結果,生成了jboss-app.xml檔案而且現在在application中也有了jar的配置資訊:
這裡,需要注意的是includeInApplicationXml這個標籤的設定,剛開始就是沒有注意到這個標籤的作用,所以一直生成不了自己想要的application.xml檔案。還有就是對jboss的配置的那句,就是說載入的時候要按照application中說明的先後順序進行載入。
現在,萬事俱備,只欠往JBoss中丟這個生成好的ear了。
悲催的事又來了,一起報一個叫java.lang.IllegalStateException:Null beannMetaData的異常,在JBoss的社群找到一篇文章,說這個錯誤在6.0.0.M1中修復了(我們用的是5.1.0.GA),這不是開玩笑麼,看來免費的就是會有這樣那樣的問題啊。再往後看,說需要將jar放到lib中,這個在前面提到的Create Skinny WARs中的那個頁面就存在,只是我比較懶,將那句省去了,到這又不得不加上,就是那句defaultJavaBundleDir的配置。
是不是說我加上了就沒事了呢?答案當然是否定的了。
沒有了之前的那個錯誤,又來了java.lang.IllegalStateException:Context already exists這個異常,更是讓人摸不著頭腦。最後在JBoss社群也沒有找到有用的解決方法,但是找到了思路。有一個人說將persistent.xml放到它自己的jar檔案中就沒有問題了(PS:真心看不懂這個人在說什麼)。
但有思路了有木有,就是實體造成的(我也是試了半天…),我將實體從ear中刪除(記得刪application.xml中的配置哦),然後先將實體部署,然後再部署打包成功的ear,結果,你懂的,成功了~~
既然成功了,就沒有再往下研究了,我想這也是目前為止最折中的方法了,在時間與效果上都是一個比較樂觀的結果。夠用就好~~~
最後,貼一下我這個專案的完整pom。由於這篇已經足夠長了,部署到遠端JBoss的事就下篇再說吧,總之啊,各種心窄啊……
<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/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>com.tgb</groupId>
<artifactId>gxpt_b_ear</artifactId>
<version>0.0.1-SNAPSHOT</version>
<packaging>ear</packaging>
<dependencies>
<dependency>
<groupId>com.tgb</groupId>
<artifactId>gxpt_entity_qx</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.tgb</groupId>
<artifactId>gxpt_common_tool</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.tgb</groupId>
<artifactId>gxpt_common_eao</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.tgb</groupId>
<artifactId>gxpt_common_eao_impl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.tgb</groupId>
<artifactId>gxpt_mgr_qx_module</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.tgb</groupId>
<artifactId>gxpt_mgr_qx_module_impl</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>jar</type>
</dependency>
<dependency>
<groupId>com.tgb</groupId>
<artifactId>gxpt_web_qx_module</artifactId>
<version>0.0.1-SNAPSHOT</version>
<type>war</type>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<artifactId>maven-ear-plugin</artifactId>
<version>2.9</version>
<configuration>
<packagingIncludes>META-INF/**,**/gxpt_*.jar,**/gxpt_*.war</packagingIncludes>
<jboss>
<version>5</version>
<module-order>strict</module-order>
</jboss>
<modules>
<jarModule>
<groupId>com.tgb</groupId>
<artifactId>gxpt_entity_qx</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
<jarModule>
<groupId>com.tgb</groupId>
<artifactId>gxpt_common_tool</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
<jarModule>
<groupId>com.tgb</groupId>
<artifactId>gxpt_common_eao</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
<jarModule>
<groupId>com.tgb</groupId>
<artifactId>gxpt_common_eao_impl</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
<jarModule>
<groupId>com.tgb</groupId>
<artifactId>gxpt_mgr_qx_module</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
<jarModule>
<groupId>com.tgb</groupId>
<artifactId>gxpt_mgr_qx_module_impl</artifactId>
<includeInApplicationXml>true</includeInApplicationXml>
</jarModule>
<webModule>
<groupId>com.tgb</groupId>
<artifactId>gxpt_web_qx_module</artifactId>
</webModule>
</modules>
</configuration>
</plugin>
</plugins>
</build>
</project>
相關推薦
用Maven打包成EAR遠端部署JBoss(一)——打包及手動部署到本地
這兩天分到了一個任務,需要弄一下怎樣用Maven將我們現在的專案打成一個EAR包,然後部署到遠端JBoss中,這樣我們每次部署的時候就會方便很多,話不多說,先看下我們專案的一個大致包結構,包前面的數字表示部署之後的載入順序。
unity3d遠端載入資源模型到本地並載入(一)打包資源
由於模型放在遠端伺服器,fbx格式是不能載入的所以可以做成預設或是AssetBundle格式進行遠端載入。首先打包AssetBundle資源!在unity資原始檔夾下新建一下一個Editor資料夾 下方一個指令碼程式碼如下!(程式碼可複製!!!) using
Linux用戶、組和權限管理(一)
linux用戶、組使用Linux是一個Multi-tasks(多任務)、 Multi-Users(多用戶)的系統每一個登陸者或使用者都有用戶標識、密碼(所謂3A) 所謂的3A: Authentication(驗證機制) Authorization(授權機制) Audition(審計)組的概
學習使用Docker、Docker-Compose和Rancher搭建部署Pipeline(一)
docker 部署 rancher 雲 微服務 說明 這篇文章是一系列文章的第一篇,在這一系列文章中,我們想要分享我們如何使用Docker、Docker-Compose和Rancher完成容器部署工作流的故事。我們想帶你從頭開始走過pipeline的革命歷程,重點指出我們這一路上遇到的
Linux 環境部署記錄(一)
sql tables 查看 ont 系統時間 earch arch borde 路徑 時間設置 查看系統當前日期/時間: date -R 查看系統硬件時鐘: hwclock --show 設置硬件時間: hwclock --set --date="07/18/
Kubernetes(K8s)安裝部署過程(一)--證書安裝
更改 目錄 hand /etc 主題 nbsp kubecon 安裝部署 post 一、安裝前主題環境準備 1、docker安裝 建議使用官網yum源安裝,添加yum源之後,直接yum install docker即可 2、關閉所有節點的selinux
System Center 2016 - Operations Manager 部署安裝(一)
scom2016 operations manager system center 2016 今天很高興和大家一起探討一下關於 System Center 2016 - Operations Manager (俗稱SCOM2016)的部署安裝,也希望多多和大家一起討論學習。其實網上有一些關於SCO
System Center 2016 - Configuration Manager 部署安裝(一)
style 管理員 擴展 管理中心 -c 還需 管理企業 roc 查詢 Hi 大家好,很高興今天和大家一起來學習探討一下 System Center 2016 - Configuration Manager , 其實一開始,我就要糾正一下我的這個叫法,不同於我之前分享給大家
docker 部署 flask(一)配置環境及測試
index www cnblogs 發現 images 註意事項 文章 進入 系統啟動 簡介: flask也是要部署的。不能老在我們的pycharm裏面跑測試服務器。 各種配置linux,我看就算了吧。我們用docker部署。 也就兩三行
SCCM2016 集成WSUS提供補丁服務(一)
雲計算 雲平臺 大家好,之前我們介紹了關於SCCM2016的一些實際功能,比如SCCM集成WDS功能為客戶端PC推送操作,還有就是分發SCCM管理組件等功能。今天來和大家一起探討一個也是十分重要的功能,補丁分發!大家都知道,在傳統的微軟基礎架構裏面,我們在沒有System Center的情況下,更多的
SCVMM 2016 部署安裝(一)
雲計算 雲平臺 Hi 大家好,今天準備和大家一起開始討論一下關於 System Center 2016 - Virtual Machine Manager (SCVMM 2016)的一些內容。System Center 2016 - Virtual Machine Manager 從字面上翻譯,是針對
ORACLE RAC部署實錄(一):ORACLE ASMLIB
oracle asm[root@king01 ~]# yum install -y kmod-oracleasm* [root@king01 ~]# rpm -ivh oracleasmlib-2.0.4-1.el6.x86_64.rpm [root@king01 ~]# rpm -ivh oracleasm
Docker 源碼架構部署篇(一)
docker一. Docker入門簡介Docker是Docker公司開源的一個基於輕量級虛擬化技術的容器引擎項目,整個項目基於Go語言開發,並遵從Apache 2.0協議。目前,Docker可以在容器內部快速自動化部署應用,並可以通過內核虛擬化技術(namespaces及cgroups等)來提供容器的資源隔離
Kubernetes集群部署篇( 一)
ner symbol emd -c level resource 模塊 ESS uber K8S集群部署有幾種方式:kubeadm、minikube和二進制包。前兩者屬於自動部署,簡化部署操作,我們這裏強烈推薦初學者使用二進制包部署,因為自動部署屏蔽了很多細節,使得對各
用Python預測某某國際平臺概率分析(一):這個到底是什麽,是什麽樣的規則?
.... pan 又是 參與 其中 其他 nbsp 中國古代 合計 這個到底是什麽? 想必大家都玩過體彩,福彩,甚至6禾踩(懂了就行),以隨機的方式依次羅列出6個(或者7個,或者8個)的數字的集合,參與者可根據已經預訂的數字進行匹配,匹配正確3個以上是什麽什麽樣的獎勵,匹
Elasticsearch學習系列一 Linux服務部署--Java(一)
Elasticsearch Elasticsearch(以下簡稱ES)是一款Java語言開發的基於Lucene的高效全文搜尋引擎。它提供了一個分散式多使用者能力的基於RESTful web介面的全文搜尋和分析服務,並作為Apache許可條款下的開放原始碼釋出,是當前流行的企業級搜尋引擎。設計
深入詳解美團點評CAT跨語言服務監控(一) CAT簡介與部署
原文連結: https://blog.csdn.net/caohao0591/article/details/80693289 前言: CAT是一個實時和接近全量的監控系統,它側重於對Java應用的監控,除了與點評RPC元件融合的很好之外,他將會能與Spring、MyBatis、Dub
以太坊系列(一)搭建環境,部署第一合約
安裝geth sudo apt-get install software-properties-common sudo add-apt-repository -y ppa:ethereum/ethereum sudo apt-get update sudo apt-
分享知識-快樂自己:SpringBoot整合熱部署配置(一)
<build> <plugins> <plugin> <groupId>org.springframework.boot</groupId> &l
Nginx之部署安裝(一)
1:安裝工具包 wget、vim和gcc yum install -y wget yum install -y vim-enhanced yum install -y make cmake gcc gcc-c++ 2:下載nginx安裝包 wget http