程序師世界是廣大編程愛好者互助、分享、學習的平台,程序師世界有你更精彩!
首頁
編程語言
C語言|JAVA編程
Python編程
網頁編程
ASP編程|PHP編程
JSP編程
數據庫知識
MYSQL數據庫|SqlServer數據庫
Oracle數據庫|DB2數據庫
 程式師世界 >> 編程語言 >> JAVA編程 >> 關於JAVA >> Eclipse和WebSphere Studio新的項目交換功能

Eclipse和WebSphere Studio新的項目交換功能

編輯:關於JAVA

引言

一位“牛氣”的程序員獨自一人就能夠編寫代碼的年代已經過去了。事實上,在每個重要的開發項目中共享代碼都是有必要的。Eclipse和IBM® WebSphere® Studio提供了幾種方法,可以用於把您的代碼與同事共享,其中每一種方法都既有優點也有缺點。在大型開發項目中,最常用的共享方法是通過儲存庫(repository)進行共享。然而,有時您可能希望在不使用儲存庫的情況下共享您的工作。

本文講解關於存儲庫和非存儲庫代碼共享的幾種不同方法,並且說明每種方法的優點和缺點。本文還將介紹一種新的項目交換(Project Interchange)功能,這種功能提供了一個可選的方式,可以在不能使用存儲庫的情況下共享代碼。

設置環境

為了演示本文中的示例,您將需要運行兩個工作區。可以采用兩種方式:

在兩台獨立的機器上運行工作區

在同一台機器上運行兩個工作區

在運行Eclipse或WebSphere Studio時使用 -data <workspaceLocation> 啟動參數,您可以在同一台機器上運行兩個工作區,其中, workspaceLocation 的值是指向您的本地驅動器的絕對路徑(absolutepath)。在Windows®平台上,您可以簡單地創建一個指向可執行文件( eclipse.exe 或 wsappdev.exe )的快捷方式,並且把該參數添加到 目標 字段就行了。無論您是使用兩台機器還是同一台機器,我們都把創建項目的工作區稱為 源工作區,而把您想要裝載共享的工作的工作區稱為 目標工作區。

首先,您將需要把一些項目存放在您的源工作區中。如果您已經有了一組具有依賴性的項目,您就可以使用這些項目;您也可以使用樣本項目,為此,您需要執行下面的操作步驟來添加它們。本文將使用通過添加 Auction 示例創建的項目(可以利用WebSphere Studio Application Developer),然後再給它增添一些細節。要將這些項目添加到您的工作區中,可以執行下面的操作步驟:

從Workbench窗口中,選擇 File => New => Other和 Examples => Enterprise Applications 1.3 => Auction。

單擊 Next按鈕,接受缺省設置,然後單擊 Finish按鈕。

把三個新的項目添加到您的工作區中: AuctionExample、AuctionRunV5EJB 和 AuctionRunV5Web 。對於項目共享而言,這是一個很好的示例,因為您需要以組的形式共享所有的項目,以使它們在另一個工作區中有意義。不過,為了有一些趣味性,讓我們添加兩種其他的依賴性。首先,將Project Utility JAR添加到EAR中:

創建一個新的名為 AuctionUtils 的Java™項目。

打開Application Deployment Descriptor編輯器,然後轉向Modules頁面。

在Utility JARs字段,單擊 Add按鈕。

在打開的對話框中,選擇 AuctionUtils 項目,然後單擊 Finish按鈕:

接著,將依賴性從 AuctionRunV5EJB 添加到 AuctionUtils中:

在Resource Navigator或J2EE Navigator中,選擇 AuctionRunV5EJB項目,打開彈出菜單,然後選擇 Properties。

選擇Java JAR Dependencies頁面,再選擇 AuctionUtils.jar作為依賴性:

現在,讓我們添加一些類路徑(classpath)變量到 AuctionUtils Java創建路徑(buildpath)中:

選擇 AuctionUtils項目,打開彈出菜單,再選擇 Properties。

選擇Java Build Path頁面,再選擇 Libraries選項卡。

單擊 Add Variable。

在打開的對話框,向下滾屏到列表,選擇變量 WAS_50_PLUGINDIR ,然後選擇 Extend。

選擇兩個JAR: lib/j2ee.jar 和 lib/xerces.jar 。

在對話框中單擊 OK按鈕以保存創建路徑:

使用類路徑變量是一種最好的方法,會使項目更易於移植和共享,因為它避免了編碼項目元數據中的絕對路徑。例如,下面是 AuctionUtils 項目中的 .classpath 文件的內容。只引用變量 WAS_50_PLUGINDIR ,而在啟動時由平台來計算引用的JAR的絕對路徑:

<?xml version="1.0" encoding="UTF-8"?>
<classpath>
<classpathentry kind="src" path=""/>
<classpathentry kind="var" path="JRE_LIB" 
rootpath="JRE_SRCROOT" sourcepath="JRE_SRC"/>
<classpathentry kind="var" path="WAS_50_PLUGINDIR/lib/j2ee.jar"/>
<classpathentry kind="var" path="WAS_50_PLUGINDIR/lib/xerces.jar"/>
<classpathentry kind="output" path=""/>
</classpath>

最後,添加utility類,它需要類路徑變量以進行編譯:

在 AuctionUtils 項目中創建名為 test 的包。

在測試包中創建類 DOMClient 。

將以下的內容添加到 DOMClient 類中:

package test;
import java.io.IOException;
import javax.xml.parsers.DocumentBuilder;
import javax.xml.parsers.ParserConfigurationException;
import org.w3c.dom.Document;
import org.xml.sax.InputSource;
import org.xml.sax.SAXException;
/**
* @author schacher
*
* This class introduces a hard requirement on DOM APIs.
* Code is for illustrative purposes only.
*/
public class DOMClient {
public static DocumentBuilder getDefaultDocumentBuilder() throws
ParserConfigurationException {
javax.xml.parsers.DocumentBuilderFactory dbf =
javax.xml.parsers.DocumentBuilderFactory.newInstance();
return dbf.newDocumentBuilder();
}
public static Document parseDocument(InputSource inputSource)
throws ParserConfigurationException, IOException, SAXException
{
ClassLoader prevClassLoader =
Thread.currentThread().getContextClassLoader();
try {
Thread.currentThread().setContextClassLoader(
DOMClient.class.getClassLoader());
javax.xml.parsers.DocumentBuilder db = getDefaultDocumentBuilder();
return db.parse(inputSource);
} finally {
Thread.currentThread().setContextClassLoader(prevClassLoader);
}
     }
     }

讓我們迅速地回顧一下您的工作區中已有的項目集:

您有四個項目,它們一起組成一個應用程序,並且需要以集合的形式進行共享。

在這些項目之間存在依賴性。

至少在Java構建路徑中存在外部依賴性。

在共享這些項目時,您需要可靠而方便地共享該數據,保存項目名和結構,保存項目之間的依賴性,並且保存任何其他項目特有的元數據和外部依賴性,如上所述。

下面的幾個部分將回顧共享這些項目的一些方法,並且描述每種方法的實現、優點和缺點。

方法1:使用存儲庫

對於小組開發,最常用的方法之一是使用後端存儲庫與本地或第三方工具支持。一個例子是Eclipse和WebSphere Studio中的CVS支持。關於使用CVS功能的詳細情況在WebShpere Studio和Eclipse的在線幫助中。

在WebSphere Studio中:

選擇 Help > Help Contents。

選擇 Application Developer Information => Workbench Basics => Tasks => Working in a team environment。

在Eclipse中:

選擇 Help > Help Contents。

選擇 Workbench User Guide => Tasks => Working in a team environment。

優點

版本控制

比較和合並能力

完整保存項目結構、項目名稱和項目元數據

共享大量項目的可靠方式

缺點

需要安裝和管理後端服務器。您可能只對設計幾個項目的原型感興趣,而沒有資源可用於服務器管理。

如果您只是進行原型設計,您可能不想把產品存儲庫於您的sandbox項目混在一起,但是無論如何,您會願意與同事共享您的工作。

由於防火牆的緣故,可能難以與外部組織共享項目。

對於任何大型項目和帶有大量產品代碼的項目(需要版本控制和頻繁備份),我們推薦使用存儲庫。

方法2:共享整個工作區

這種共享方法采用“強制”方式。您要麼復制要麼壓縮您的整個工作區,並使其可用於另一個開發人員。在目標端,將工作區復制或壓縮到本地磁盤上,並且利用上述 -data 啟動參數啟動工作台。在您使用此方法時,請務必在復制或壓縮文件之前關閉工作台,因為即使工作台看起來像是空閒的,但是在後台線程中,元數據文件也可能正處在更新的過程中。

需要引起注意的另一件事是,當您共享工作區時,您共享了一切東西,包括您的全部引用。這可能是一個優點也可能是一個缺點,取決於您的目的,如下所述。此外,如果您的項目不在缺省位置(它在工作區根木錄下),那麼共享將需要進行更多的工作--您必須單獨壓縮項目,並把它們解壓縮到目標機器上相同的物理路徑(physical path)中。

優點

項目結構、項目名稱和項目元數據的完整保存。

共享一切東西的簡單方法,和與組中剛入門的新成員共享復雜設置的有效方式。在共享服務器上可以使用缺省工作區。

可以與組存儲庫一起使用。例如,可以把缺省工作區設置發布到一個常見的位置,而組員可以獲得這個工作區,並且只同步哪些它們正在積極開發的項目。

缺點

工作區壓縮文件可能變得非常大,需要額外的時間來壓縮和解壓縮,占用了服務器上相當大的存儲空間,而如果通過電子郵件發送有時會產生問題。文件大小中大量的不是由項目本身導致的,而是由平台所存儲的元數據導致的。

如果項目在非缺省位置,則需要進行額外的工作。

您可能只需要共享工作區中的一部分項目,但是需要您共享一切東西,包括引用在內。

方法3:導出EAR文件(僅限於WebSphere Studio)

使用這個方法,您可以從您的工作區中組成一個企業應用程序的一部分項目生成一個J2EE Enterprise Archive(EAR)文件。許多共享J2EE應用程序的小組使用這種方法,就像我們正在使用的樣本那樣,因為這種方法捆綁EAR文件所需所有項目的內容的能力非常強。下面是使用此方法的步驟,從這些步驟中可以看出,此方法並不一直是最佳的。首先從您的源工作區導出EAR文件。

從WebSphere Studio Workbench窗口中,選擇 File => Export => EAR file,然後單擊 Next按鈕。

從下一個窗口中,選擇 AuctionExample。

定位到或輸入文件位置。

選擇 Export source files。

選擇 Include project build paths and metadata files。

單擊 Finish按鈕以完成導出:

現在,您剛在 目標工作區中創建的EAR文件:

選擇 File => Import => EAR file,然後單擊 Next按鈕。

定位到EAR文件的位置,輸入項目名 AuctionExample ,然後單擊 Next按鈕。

務必選擇 Create a new Java project defined as a utility JAR or web library,確保 JAR auctionUtils.jar 展開在它自己的Java項目中,就好像它是在源工作區中一樣。

單擊 Finish按鈕來完成導入:

現在,您已經完成了導入,並且為部署准備好了一切東西,因為我們包含了源項目並且展開了實用JAR,對嗎?基本上是,但還不完全。注意,在實用JAR項目中有編譯錯誤:

為什麼存在這些錯誤呢?回想一下,在創建源項目的過程中,我們添加了類路徑變量,以給 xercers.jar 和 j2ee.jar 文件增加可視性。之所以需要這些變量,是為了編譯 DOMClient 類中的代碼。然而在導入時,此信息丟失了。不過,請注意,該Web項目編譯了,而沒有產生任何錯誤,因為導入操作能夠從web-app中的 MANIFEST.MF 文件所指定的依賴性,派生出Java創建路徑項目依賴性,如下所示:

Manifest-Version: 1.0
Class-Path: AuctionRunV5EJB.jar

在根據manifest文件中指定的依賴性生成Java創建路徑方面,EAR導入或許是最佳的,但是它不能決定外部依賴性。您可能會問:“選擇保存元數據如何?”之所以存在這種選擇,是為了支持用於最優化創建的二進制項目方案(要獲得關於二進制項目的更多信息,請參見在線幫助)。當您試圖保存元數據並且將 EAR作為源文件展開時會帶來幾種復雜性。例如,如果原始項目結構在一個項目中包含了多個源文件夾會怎樣?導入不能決定哪些文件屬於哪些源文件夾。有許多方式存在著局限性,這個問題可能會在另一個版本中解決,但或許這不是一個好的策略。人們已經把EAR導入/導出作為一種方便的交換格式,因為直到現在為止,還沒有更好的共享項目的方法。然而,對於應用程序服務器,EAR文件是可部署的構件(artifact),並且在通常情況下,它不應該包括源代碼和特定工具的元數據。

優點

計算所有與企業應用程序有關的項目並且把代碼打包成一個文件的簡單方法。

缺點

沒有完整地保存原始項目結構和外部依賴性。

EAR文件沒有和外來數據一起導出。

方法4:導出ZIP文件

您已經了解了用於在開發人員之間共享項目的三種獨立方法。使用存儲庫是最好的方法,但是有時,您可能需要與沒有權利訪問您的存儲庫的開發人員共享項目。您可以像上面所講的那樣共享整個工作區,但是這通常需要共享大量不必要的元數據。如果它是一個J2EE應用程序,您可以導出EAR文件,它比共享整個工作區好一些。但是如上所述,EAR導出沒有保留具體項目結構。這給我們帶來了第四種共享項目的方法--使用ZIP文件。

要開始用這種方法來共享項目,需要把一組項目導出到ZIP文件中:

選擇 File => Export來打開Export向導:

選擇 Zip file,然後單擊 Next按鈕。

選擇所有您需要共享的項目,這意味著您必須知道項目之間的關系,這樣您才能共享完整的項目集。輸入ZIP文件的位置(如 D:\temp\AuctionProjects.zip ):

單擊 Finish按鈕來導出項目。

如上所示,將項目導出到ZIP文件中是相當簡單的。然而,將項目導入到目標工作區中卻並不那麼容易:

將 AuctionProjects.zip文件解壓縮到一個目錄。這個目錄將是項目的實際地址,所以您可能需要把內容解壓縮到您現有的工作區中。出於演示的目的,將內容導出到臨時位置(如 D:\temp\AuctionProjects )。

選擇 File => Import來打開Import向導:

選擇 Existing Project into Workspace,然後單擊 Next按鈕。

單擊 Browse來定位到第一個項目目錄( AuctionExample )的位置(即步驟1中的臨時位置):

單擊 Finish按鈕。這將在工作區(位置與步驟4相同)中創建 AuctionExample 項目。

對於您想要共享的每個項目,重復步驟2到5。

優點

可以保存項目結構。

可以在不共享整個工作區的情況下共享一部分項目。

缺點

在導出過程中,必須手工選擇全部所需項目。

在您解壓縮項目ZIP文件的地方必須保持謹慎,因為這是共享的項目的位置。

必須將每個項目逐個地導入到另一個工作區中。

方法5:使用項目交換ZIP文件

前面討論的方法都沒有提供一種好的機制,可以在不使用存儲庫的情況下輕松地進行消息共享。一種理想的項目共享方法應該是這樣的:它不僅可以保存整個項目結構,包括元數據文件在內,與工作區共享方法中的一樣;而且可以方便地計算整個應用程序所需的項目集,與導出EAR文件的方法中的一樣。此外,使用一個動作就應該很容易地將項目導入到另一個工作區中,而不應該每個項目都需要幾個動作,與導出ZIP文件的方法中的一樣。

目前,在Eclipse或WebSphere Studio中並不存在這樣的功能。因此,我們開發了項目交換(Project Interchange)功能,它為在一個步驟中共享項目集提供了新的導入和導出向導。在使用這個新的功能之前,您將需要把它添加到您的Eclipse或 WebSphereStudio版本中。

安裝項目交換功能

將 com.ibm.etools.project.interchange.feature.zip解壓縮到您的WebSphere Studio或Eclipse安裝目錄。

啟動WebSphere Studio或Eclipse。系統會提示您有正在進行的更改。單擊 Yes按鈕。如果提示沒有出現,則可以選擇 Help => Software Updates => Pending Changes。

在打開的Pending Configuration Changes窗口中展開樹型目錄。選擇頂層日期(top leveldate),它應該包括 Project Interchange功能(它應該是第一個和惟一的項目)。

單擊 Finish。

在系統提示重新啟動時,單擊 Yes按鈕,這樣所作的更改就將生效。

項目交換功能通過ZIP文件(它非常類似於前面導出的ZIP文件)來共享項目。然而,它為創建ZIP文件提供了更強大的Export向導。要導出相關的項目集,可以執行如下操作步驟:

選擇 File => Export來打開Export向導:

選擇 Project Interchange,然後單擊 Next按鈕:

選擇 AuctionExample項目,然後單擊 Select Referenced。這將自動選擇選中的項目所需的全部項目。

在 To ZIP file字段中輸入ZIP文件(如 D:\temp\AuctionProjects2.zip )。

單擊 Finish按鈕來創建ZIP文件。

現在,您有了所需項目的ZIP文件,與導出ZIP文件部分中的一樣,只是您不需要知道所有的項目依賴性。要使用項目交換功能將這些項目導入另一個工作區中,可以執行如下操作步驟:

選擇 File => Import來打開導入向導:

選擇 Project Interchange,然後單擊 Next按鈕:

定位到剛導出的ZIP文件( D:\temp\AuctionProjects2.zip )。項目列表將根據所選ZIP文件中的項目進行刷新。

在缺省情況下,Project location root(項目位置根)就是您的工作區,不過,您可以將其更改為任何位置,您想把這個位置作為項目將要解壓縮到的目錄。

選擇 AuctionExample項目。單擊 Select Referenced來自動選擇全部所需的項目。

單擊 Finish來將全部所選的項目從ZIP文件解壓縮到項目位置根目錄中,然後導入工作區。

如上面步驟所示,使用新的項目交換功能共享項目是很簡單的。然而,這個項目共享的方法也有一些缺點,並非對於所有情況都是最理想的。您可以通過使用存儲庫共享代碼來避免這些缺點,項目交換方法並無意取代開發小組中共享項目的存儲庫。

優點

易於使用

保存確切的項目名、結構和類路徑

為導入和導出計算引用的項目

允許一次導入多個項目,並且將從ZIP文件復制到工作區位置或任何其他所選的位置。

缺點

沒有版本控制

沒有代碼合並能力--只是在檢測到沖突時進行替換

結束語

本文描述了五種在Eclipse或WebSphere Studio中共享項目的不同方法。對於需要具備版本控制和合並能力的開發小組而言,最好用存儲庫來共享項目。然而,您可能需要與沒有權限訪問您的存儲庫的開發人員共享項目,或者您不能使用存儲庫,在這些情況下,您可以使用其他四種方法。

共享整個工作區可能相當麻煩,並且它強制您選定整個新的工作區。如果您正使用WebSphere Studio,並且希望共享一個應用程序項目及其全部模塊項目,那麼您可能很想導出一個EAR文件,並且將它和它的內容導入另一個工作區。不過,帶有元數據的EAR導出從來沒有打算成為一種共享應用程序項目的方法,並且它將必定沒有所期望的結果。一種更好的解決方案是把項目導出到ZIP文件中,然後把內容回導到工作區中,不過,導入需要您首先解壓縮內容,然後一個一個地單獨導入每個文件。

本文還描述了一種新的項目交換功能,它為不能使用存儲庫時共享項目提供了最好的方法。其簡單性、易於使用和豐富的功能使這種方法成為一種優秀的共享項目的解決方案。

本文配套源碼

  1. 上一頁:
  2. 下一頁:
Copyright © 程式師世界 All Rights Reserved