2012-01-23 20 views
0

我有一個也使用Hibernate的大型Struts1 web項目。如何從現有的Java項目中提取主類?

我們的一個套餐是:

com.company.examples.users

另一個原因是:

com.company.examples.orders

在這些軟件包中,有一個main.java文件用於測試(實際上是從Netbeans中運行文件)。

所以,我可以右鍵單擊主文件,並告訴它運行,輸出顯示在日誌窗口中。沒事兒。但我希望能夠將它們解壓縮到實際的JAR文件中,以便它們可以單獨運行。

這些文件還依賴於整個大型項目。很多包裝等。

我該怎麼做?

+0

你問如何創建一個罐子?如何使用jar命令? –

+0

嗯,我很喜歡Java(C#/ Ruby開發人員),所以我想是的。我可以創建大量的WAR文件以部署到我們的Web服務器,但我需要將它的一部分(main.java類)提取到單獨的JAR文件中。謝謝 – cbmeeks

+0

如您所說,main.java類用於測試其他類。所以他們可能依賴所有其他類。因此,您應該創建一個包含所有類的單個jar文件。組織中沒有人知道Java如何工作?必須有一些構建過程來生成war文件,並且應該更新此構建過程以生成jar文件。 –

回答

1

這是一個快速和骯髒的DOS方式。創建一個文件夾並將其放入其中。

>md test 
>cd test 

prepare-tests.batmake-classpath.bat文件複製WAR文件,該文件夾中。

其中prepare-tests.bat是:

md unpacked 
cd unpacked 
jar xvf ..\%1 
cd WEB-INF\classes 
jar cvf ..\..\..\classes.jar * 
cd ..\..\.. 
call make-classpath 

而且make-classpath.bat是:

@echo off 
<nul set /p =set CLASSPATH=.;> set-classpath.bat 
<nul set /p =classes.jar;>> set-classpath.bat 
for /f %%a IN ('dir unpacked\WEB-INF\lib *.jar /s/b') do <nul set /p =%%a;>> set-classpath.bat 

基本上,這些步驟將解包WAR,JAR高戰爭類(如果有的話),並創建一個類路徑點到那些類以及WEB-INF/lib文件夾中的所有JAR。

然後,您可以運行測試(從創建的test文件夾中):

>prepare-tests my-war.war 
>set-classpath 
>java com.foo.bar.MyTest 

你會好得多使用像Maven和JUnit工具來自動化/雖然方便您的測試。

+0

這實際上工作。但是我繼續創建了一個獨立的Java應用程序,並移植了我需要的東西。這是一個很好的提醒,我們需要更好地組織這些東西。 :-)謝謝\ – cbmeeks

+0

很酷。是的,最好嘗試構建能完成一項工作並做得很好的小組件。然後,他們可以在不需要應用程序服務器的情況下進行獨立測試。有些測試當然需要一個Web容器才能運行,但最終的結果會少得多。 –

相關問題