1. 程式人生 > >用Maven打包成EAR遠端部署JBoss(一)——打包及手動部署到本地

用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包如下,現在就只剩下我們需要部署的jarwar

       

       現在就可以部署了麼?如果真的是這樣,那麼這篇文章也就沒有必要了。我們現在將其丟進去,發現會報空指標問題,原因就是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/

KubernetesK8s安裝部署過程--證書安裝

更改 目錄 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