專利名稱:一種j2ee工程部署的方法和裝置的制作方法
技術(shù)領(lǐng)域:
本發(fā)明涉及計(jì)算機(jī)應(yīng)用領(lǐng)域,具體涉及一種J2EE工程部署的方法和裝置。
背景技術(shù):
在J2EE (Java 2 Platform,Enterprise Edition, Java2平臺企業(yè)版)工程的 開發(fā)過程中,經(jīng)常需要將開發(fā)的工程部署到應(yīng)用服務(wù)器上,通常有兩種部署 方法。第一種是在集成開發(fā)環(huán)境(Integrated development environment, IDE) 中將工程導(dǎo)出為標(biāo)準(zhǔn)的EAR (Enterprise Application aRchive)、 WAR (Web Application aRchive)等歸檔格式,再手動(dòng)將這些歸檔文件拷貝到應(yīng)用服務(wù)器 的應(yīng)用部署目錄下,重啟該服務(wù)器以在應(yīng)用服務(wù)器中注冊該工程及配置該工 程運(yùn)行所需要的資源,即裝載此工程。第二種是指定了服務(wù)器后,自動(dòng)在IDE 新建一個(gè)目錄作為虛擬服務(wù)器,并將服務(wù)器的配置文件拷貝至該虛擬服務(wù)器 下對應(yīng)的目錄中。當(dāng)開發(fā)者重新部署應(yīng)用時(shí)自動(dòng)將工程打包成EAR、 WAR 等歸檔格式,并拷貝至虛擬服務(wù)器下對應(yīng)的部署目錄中,然后使用虛擬服務(wù) 器中的配置信息及部署目錄重新啟動(dòng)指定的服務(wù)器裝載此工程,如eclipse下 面的wtp子工程對tomcat服務(wù)器部署的支持。
在對現(xiàn)有技術(shù)的研究和實(shí)踐過程中,本發(fā)明的發(fā)明人發(fā)現(xiàn)現(xiàn)有技術(shù)存在 以下問題
在上述兩種部署方法中,Jar ( Java Archive File, Java存檔文件)包都是 存放在實(shí)際應(yīng)用環(huán)境的服務(wù)器類路徑中,在IDE中不可見,所以,為了使工 程編譯成功,則需要手動(dòng)將Jar包加入到工程的編譯路徑,或者利用IDE中 的開發(fā)工具配置相應(yīng)的Jar包到工程編譯路徑,但在IDE中生成的Jar包與實(shí) 際應(yīng)用環(huán)境中應(yīng)用服務(wù)器廠商提供的Jar包并不是完全一樣,因此,很可能 出現(xiàn)Jar包沖突而導(dǎo)致工程不能正常運(yùn)行的情況。
發(fā)明內(nèi)容
本發(fā)明實(shí)施例要解決的技術(shù)問題是提供一種J2EE工程部署的方法和裝 置,使得不再出現(xiàn)因Jar包沖突而導(dǎo)致工程不能正常運(yùn)行的情況。
為解決上述技術(shù)問題,本發(fā)明所提供的實(shí)施例是通過以下技術(shù)方案實(shí)現(xiàn)
的
一種J2EE工程部署的方法獲取服務(wù)器的類加載路徑;將所述服務(wù)器的 類加載路徑加入到工程的類加載路徑里。
優(yōu)選地,所述將所述服務(wù)器的類加載路徑加入到工程的類加載路徑里之 后還包括將所述工程編譯到一目錄;將所述目錄加入到所述服務(wù)器的應(yīng)用 注冊文件中。
優(yōu)選地,所述將所述工程編譯到一 目錄具體為將所述工程自動(dòng)編譯到 一目錄。
優(yōu)選地,所述獲取服務(wù)器的類加載路徑具體為在將工程與服務(wù)器綁定 后,獲取服務(wù)器的類加載路徑。
優(yōu)選地,所述將工程自動(dòng)編譯到一 目錄具體為利用J2EE Builder自動(dòng)編 譯工程到工程下一個(gè)隱藏目錄。
一種J2EE工程部署的裝置,包括獲取單元,用于獲取服務(wù)器的類加載 路徑;加載單元,用于將獲取單元獲取的所述服務(wù)器的類加載路徑加入到工 程的類加載路徑里。
優(yōu)選地,所述裝置還包括編譯單元,用于將加載單元加載了路徑的所 述工程編譯到一目錄;應(yīng)用注冊單元,用于將編譯單元編譯的所述目錄加入 到所述服務(wù)器的應(yīng)用注冊文件中。
由上述技術(shù)方案可以看出,本發(fā)明實(shí)施例通過直接將服務(wù)器類路徑中包 含的Jar包加入到工程的編譯路徑中,在實(shí)際應(yīng)用環(huán)境中完成工程編譯,解決 了因Jar包沖突而導(dǎo)致工程不能正常運(yùn)行的問題。
為了更清楚地說明本發(fā)明實(shí)施例或現(xiàn)有技術(shù)中的技術(shù)方案,下面將對實(shí) 施例或現(xiàn)有技術(shù)描述中所需要使用的附圖作簡單地介紹,顯而易見地,下面 描述中的附圖僅僅是本發(fā)明的一些實(shí)施例,對于本領(lǐng)域普通技術(shù)人員來講, 在不付出創(chuàng)造性勞動(dòng)性的前提下,還可以根據(jù)這些附圖獲得其他的附圖。
圖1是本發(fā)明實(shí)施例一的方法流程示意圖2是本發(fā)明實(shí)施例二的方法流程示意圖3是本發(fā)明實(shí)施例裝置的結(jié)構(gòu)示意圖。
具體實(shí)施例方式
下面將結(jié)合本發(fā)明實(shí)施例中的附圖,對本發(fā)明實(shí)施例中的技術(shù)方案進(jìn)行 清楚、完整地描述,顯然,所描述的實(shí)施例僅僅是本發(fā)明一部分實(shí)施例,而 不是全部的實(shí)施例。基于本發(fā)明中的實(shí)施例,本領(lǐng)域普通技術(shù)人員在沒有作 出創(chuàng)造性勞動(dòng)前提下所獲得的所有其他實(shí)施例,都屬于本發(fā)明保護(hù)的范圍。
本發(fā)明實(shí)施例通過直接將服務(wù)器類路徑中Jar包加入到工程的編譯路徑 中,在實(shí)際應(yīng)用環(huán)境中完成工程編譯,解決了 Jar包沖突而導(dǎo)致工程不能正 常運(yùn)行的問題。
實(shí)施例一、請參見圖1,圖1為本發(fā)明實(shí)施例的方法流程示意圖。
步驟101:獲取服務(wù)器的類加載路徑;
類加栽路徑實(shí)際上就是Java實(shí)際應(yīng)用環(huán)境加載Jar包的路徑,獲取服務(wù) 器的類加載路徑即可通過服務(wù)器類路徑獲取Jar包。
可以通過服務(wù)器的技術(shù)手冊獲取類加載路徑,服務(wù)器可以是預(yù)先綁定的。 步驟102:將所述服務(wù)器的類加載路徑加入到工程的類加載路徑里。 將所述服務(wù)器的類加載路徑加入到工程的類加載路徑之后,編譯工程的 Java實(shí)際應(yīng)用環(huán)境就可以通過工程的類加載路徑加載服務(wù)器包含的Jar包,這 樣,則通過直接利用實(shí)際應(yīng)用服務(wù)器中的Jar包而避免了工程運(yùn)行過程中的Jar 包沖突問題,從而使得不再出現(xiàn)因Jar包沖突而導(dǎo)致工程不能正常運(yùn)行的情 況。
現(xiàn)有技術(shù)需要手動(dòng)將歸檔文件拷貝到應(yīng)用服務(wù)器的應(yīng)用部署目錄下,然 后重啟該服務(wù)器裝載此工程,本發(fā)明實(shí)施例還提出可將工程編譯加入到服務(wù) 器的應(yīng)用注冊文件中,以下實(shí)施例二結(jié)合圖2詳細(xì)說明,圖2為本發(fā)明實(shí)施 例二的流程示意圖。
實(shí)施例二、
步驟201:指定工程所綁定的服務(wù)器。
在新建工程時(shí),指定一個(gè)服務(wù)器與工程綁定,就可以直接把服務(wù)器中的 jar包添加到工程的編譯路徑中以完成編譯。 步驟202:獲取服務(wù)器的類加載路徑。
類加載路徑實(shí)際上就是Java實(shí)際應(yīng)用環(huán)境加載Jar包的路徑,獲取服務(wù)器的類加載路徑即可通過路徑獲取放在服務(wù)器中的Jar包,
一般Jar文件包按照一定的結(jié)構(gòu)包含了由每個(gè)單獨(dú)的類Class和接口 Implements編譯成的單獨(dú)的一個(gè).class文件,類路徑中可能包含很多Jar包的 路徑,比如類路徑的設(shè)置可能是這樣的C:\devl.jar; C:\dev2.jar;這樣當(dāng)Java 實(shí)際應(yīng)用環(huán)境按照此類路徑就可以加載到C盤根目錄下devl.jar和dev2.jar這 兩個(gè)Jar包中包含的.class文件。
可以通過服務(wù)器的技術(shù)手冊獲取類加載路徑,服務(wù)器可以是預(yù)先綁定的。 步驟203:將所述服務(wù)器的類加載路徑加入到所述工程的類加載路徑里。 將所述服務(wù)器的類加載路徑加入到所述工程的類加載路徑之后,編譯工 程的Java實(shí)際應(yīng)用環(huán)境就可以將服務(wù)器類路徑中的Jar包加載,這樣,就通 過直接利用實(shí)際應(yīng)用服務(wù)器中的Jar包而避免了工程運(yùn)行過程中的Jar包沖突 問題。
步驟204:將工程編譯到一 目錄。
可以由J2EE Builder將工程自動(dòng)編譯到一 目錄,該目錄可以是隱藏目錄, 都不影響本發(fā)明實(shí)施例的實(shí)現(xiàn)。
步驟205:將所述目錄加入到所述服務(wù)器的應(yīng)用注冊文件中。
將所述目錄加入到所述服務(wù)器的應(yīng)用注冊文件中,服務(wù)器就可在工程文 件在修改之后,直接重新加載新編譯好的文件,而避免了現(xiàn)有技術(shù)中的經(jīng)常 調(diào)試、重新部署應(yīng)用,手動(dòng)拷貝歸檔文件至應(yīng)用服務(wù)器等麻煩之處。
本發(fā)明實(shí)施例在實(shí)施例一的基礎(chǔ)上增加了將工程自動(dòng)編譯到一目錄,并 將所述目錄加入到所述服務(wù)器的應(yīng)用注冊文件中的步驟,不但避免了 Jar包沖 突的問題,而且使得服務(wù)器能直接重新加載新編譯好的文件,簡化了工程部
署流程。
實(shí)施例三為實(shí)際應(yīng)用環(huán)境中的 一具體實(shí)例,以EAR工程為例進(jìn)行詳細(xì)說明。
實(shí)施例三、
步驟301:新建EAR工程。
新建名為DEMO的EAR工程
步驟302:指定與工程綁定的服務(wù)器。
與DEMO工程綁定的服務(wù)器的名稱為Apusic-5.1。
步驟303:獲取服務(wù)器的類加載路徑。
根據(jù)服務(wù)器的技術(shù)手冊獲取服務(wù)器的類加載路徑為
步驟304:將所述服務(wù)器的類加載路徑加入到工程的類加載路徑里。
將步驟303獲取的服務(wù)器的類加載路徑 /home/dev/Apusic-5.1/domain/mydomain加入到工程的類加載路徑里,其中包括javaee.jar,jsf-api.jar, elite-api.jar等Jar包.
步驟305:將工程自動(dòng)編譯到一目錄。
將工程自動(dòng)編;奪到目錄/home/dev/workspace/DEMO/.explodedEar里。 步驟306:將所述目錄加入到所述服務(wù)器的應(yīng)用注冊文件中。 將步驟305將工程編譯到的目錄/home/dev/workspace/DEMO/.explodedEar 加入到所述服務(wù)器的應(yīng)用注冊文件中。
本發(fā)明實(shí)施例中使用到的關(guān)鍵代碼具體如下 〃以下代碼完成取得工程對應(yīng)的服務(wù)器信息
String defautlDomain = path.lastSegment();
ServerEntry entry = ServerStore.getlnstance().getEntryBy(entryName); if(entry == null) return;
IDomain domain = entry. getDomain(defautlDomain); if(domain != null) server = domain.getServer();
protected void initialClasspathEntries(){ if(server!=null
&&server.getDomain() !=null
&&! server. getDomain().isRemote()) {
〃下面 一行代碼調(diào)用服務(wù)器接口取得服務(wù)器的類路徑
String classpath[] = ((ILocalServer)server).getClasspath()
list entryList = new ArraylistO
/home/dev/Apusic陽5.1/domain/mydomain。
括javaee.jar、 jsf-api.jar、 elite-api.jar等Jar包。
下面一段循環(huán)完成將服務(wù)器類路徑中的Jar包添加到工程的類路徑中的 功能
for(int i = 0; i < classpath.length; i++){ File file = new File(classpath[i]); if(file.isDirectory() && file.exists() && javaProject != null)( IProject project =javaProject.getProject() if(project.isAccessible(》{
String classPathName = (new Path(classpath[i])).lastSegment();
IFolder folder = project.getFolder(classPathName != null (new
StringBuilder("apusic")).append(classPathName).toString():
IPath folderRawPath = folder.getRawLocation(); IPath classPath = new Path(classpath[i]); if(!folder.isAccessible() 11! folder, islinked()
11 ! classPath. equals(folderRawPath)) {
folder.createLink(new Path(classpath[i]), 256, new
NullProgressMonitor());
entryList.add(newLibraryEntry(folder.getFullPathO));
} else{
entryList.add(newLibraryEntry(new Path(classpath[i]))) entries = (IClasspathEntry[])entryList.toArray(new IClasspathEntry[O]);
return; } else {
entries = new IClasspathEntry[O]; return;
取得工程下指定的隱藏目錄的代碼為 IFolder earExplodedFolder =
ApusicCore.getApusicProj ect(getProj ect()) .getExploded(); 〃取得工程下指定的隱藏目錄(J2EEBuilder將編譯工程至此目錄)
IFolder srcFolder = null
IFolder destFolder = null
IFolder destlmportedClassesFolder = null
需要說明的是,對于前述的各方法實(shí)施例,為了簡單描述,故將其都 表述為一系列的動(dòng)作組合,但是本領(lǐng)域技術(shù)人員應(yīng)該知悉,本發(fā)明并不受 所描述的動(dòng)作順序的限制,因?yàn)橐罁?jù)本發(fā)明,某些步驟可以采用其他順序 或者同時(shí)進(jìn)行。其次,本領(lǐng)域技術(shù)人員也應(yīng)該知悉,說明書中所描述的實(shí) 施例均屬于優(yōu)選實(shí)施例,所涉及的動(dòng)作和模塊并不一定是本發(fā)明所必須 的。
在上述實(shí)施例中,對各個(gè)實(shí)施例的描述都各有側(cè)重,某個(gè)實(shí)施例中沒 有詳述的部分,可以參見其他實(shí)施例的相關(guān)描述。
以上提供了一種J2EE工程部署的方法,本發(fā)明實(shí)施例還提供一種J2EE 工程部署的裝置。
一種J2EE工程部署的裝置,參見圖3,圖3為本發(fā)明實(shí)施例裝置的結(jié)構(gòu) 示意圖,所述裝置包括
獲取單元301,用于獲取服務(wù)器的類加載路徑;
加載單元302,用于將獲取單元301獲取的所述服務(wù)器的類加載路徑加入 到工程的類加載路徑里,使得工程可直接利用實(shí)際應(yīng)用服務(wù)器中的Jar包。 所述J2EE工程部署的裝置,還包括
編譯單元303,用于將加載單元302加載了路徑的所述工程編譯到一 目錄, 也可將所述工程自動(dòng)編譯到一目錄,可以是隱藏目錄;
應(yīng)用注冊單元304,用于將編譯單元303編譯的所述目錄加入到所述服務(wù) 器的應(yīng)用注冊文件中,使服務(wù)器可以直接重新加載新編譯好的文件。
在獲取單元301獲取到服務(wù)器的類加載路徑后,加載單元302將獲取單 元301獲取的所述服務(wù)器的類加載路徑加入到工程的類加載路徑里,使得工 程可直接利用實(shí)際應(yīng)用服務(wù)器中的Jar包;編譯單元303將所述工程編譯到一 目錄或者自動(dòng)編譯到一目錄后,應(yīng)用注冊單元304將所述目錄加入到所述服 務(wù)器的應(yīng)用注冊文件中,使服務(wù)器可以直接重新加載新編譯好的文件。
本發(fā)明實(shí)施例通過直接將服務(wù)器類路徑中包含的Jar包加入到工程的編 譯路徑中,在實(shí)際應(yīng)用環(huán)境中完成工程編譯,解決了 Jar包沖突而導(dǎo)致工程不 能正常運(yùn)行的問題。
本發(fā)明實(shí)施例還可將工程自動(dòng)編譯到一 目錄,并將所述目錄加入到所述 服務(wù)器的應(yīng)用注冊文件中的步驟,不但避免了 Jar包沖突的問題,而且使得服 務(wù)器能直接重新加載新編譯好的文件,簡化了工程部署流程。
本發(fā)明可以用于眾多通用或?qū)S玫挠?jì)算系統(tǒng)環(huán)境或配置中。例如個(gè)人 計(jì)算機(jī)、服務(wù)器計(jì)算機(jī)、手持設(shè)備或便攜式設(shè)備、平板型設(shè)備、多處理器系 統(tǒng)、基于微處理器的系統(tǒng)、置頂盒、可編程的消費(fèi)電子設(shè)備、網(wǎng)絡(luò)PC、小型 計(jì)算機(jī)、大型計(jì)算機(jī)、包括以上任何系統(tǒng)或設(shè)備的分布式計(jì)算環(huán)境等等。此 外,本發(fā)明還可以在由計(jì)算機(jī)執(zhí)行的計(jì)算機(jī)可執(zhí)行指令的 一般上下文中描述, 例如程序模塊。 一般地,程序模塊包括執(zhí)行特定任務(wù)或?qū)崿F(xiàn)特定抽象數(shù)據(jù)類 型的例程、程序、對象、組件、數(shù)據(jù)結(jié)構(gòu)等等。也可以在分布式計(jì)算環(huán)境中 實(shí)踐本發(fā)明,在這些分布式計(jì)算環(huán)境中,由通過通訊網(wǎng)絡(luò)而被連接的遠(yuǎn)程處 理設(shè)備來執(zhí)行任務(wù)。在分布式計(jì)算環(huán)境中,程序模塊可以位于包括存儲設(shè)備 在內(nèi)的本地和遠(yuǎn)程計(jì)算機(jī)存儲介質(zhì)中。
以上對本發(fā)明實(shí)施例所提供的一種J2EE工程部署的方法和裝置進(jìn)行了
詳細(xì)介紹,
以上實(shí)施例的說明只是用于幫助理解本發(fā)明的方法及其核心思想;同時(shí),對
于本領(lǐng)域的一般技術(shù)人員,依據(jù)本發(fā)明的思想,在具體實(shí)施方式
及應(yīng)用范圍 上均會有改變之處,綜上所述,本說明書內(nèi)容不應(yīng)理解為對本發(fā)明的限制。
權(quán)利要求
1、一種J2EE工程部署的方法,其特征在于獲取服務(wù)器的類加載路徑;將所述服務(wù)器的類加載路徑加入到工程的類加載路徑里。
2、 根據(jù)權(quán)利要求1所述的J2EE工程部署的方法,其特征在于所述將所述服務(wù)器的類加載路徑加入到工程的類加載路徑里之后還包括將所述工程編譯到一目錄;將所述目錄加入到所述服務(wù)器的應(yīng)用注冊文件中。
3、 根據(jù)權(quán)利要求2所述的J2EE工程部署的方法,其特征在于 所述將所述工程編譯到一目錄具體為將所述工程自動(dòng)編譯到一目錄。
4、 根據(jù)權(quán)利要求1或2所述的J2EE工程部署的方法,其特征在于 所述獲取服務(wù)器的類加載路徑具體為在將工程與服務(wù)器綁定后,獲取服務(wù)器的類加載路徑。
5、 根據(jù)權(quán)利要求3所述的J2EE工程部署的方法,其特征在于 所述將工程自動(dòng)編譯到一 目錄具體為利用J2EE Builder自動(dòng)編譯工程到工程下一個(gè)隱藏目錄。
6、 一種J2EE工程部署的裝置,其特征在于,包括 獲取單元,用于獲取服務(wù)器的類加載路徑;加載單元,用于將獲取單元獲取的所述服務(wù)器的類加載路徑加入到工程 的類加載路徑里。
7、 根據(jù)權(quán)利要求6所述的J2EE工程部署的裝置,其特征在于,還包括: 編譯單元,用于將加載單元加載了路徑的所述工程編譯到一目錄; 應(yīng)用注冊單元,用于將編譯單元編譯的所述目錄加入到所述服務(wù)器的應(yīng)用注冊文件中。
全文摘要
本發(fā)明實(shí)施例公開了一種工程部署的方法及裝置,所述方法為獲取服務(wù)器的類加載路徑;將所述服務(wù)器的類加載路徑加入到工程的類加載路徑里。所述裝置包括獲取單元,用于獲取服務(wù)器的類加載路徑;加載單元,用于將獲取單元獲取的所述服務(wù)器的類加載路徑加入到工程的類加載路徑里。本發(fā)明實(shí)施例通過直接將服務(wù)器類路徑中包含的Jar包加入到工程的編譯路徑中,在實(shí)際應(yīng)用環(huán)境中完成工程編譯,解決了因Jar包沖突而導(dǎo)致工程不能正常運(yùn)行的問題。
文檔編號G06F9/45GK101344858SQ200810146608
公開日2009年1月14日 申請日期2008年9月1日 優(yōu)先權(quán)日2008年9月1日
發(fā)明者徐新杰 申請人:深圳市金蝶中間件有限公司