2011-10-28 96 views
1

在使用jGRASP我注意到輸出在包裝程序比正常略有不同,具體的節目名稱似乎是從類的頂部開始的相對路徑。Java編譯,包和相對路徑

例如,對於一個Java程序,包括聲明package ch01.stacks;,編譯輸出的樣子:

javac -g ch01\stacks\ArrayStack.java 

,並出現同樣的運行輸出。

我在想,如果有模擬在其他程序,如記事本++或gedit中,用戶可以設置腳本編譯程序,這種行爲比較簡單的方法。

編輯:我很抱歉,我忘了提及編譯腳本,我說的基本上是程序文件名傳遞到javac。我寧願不使用絕對路徑,我希望我的腳本儘可能以類似於jGRASP的方式工作。

爲了進一步澄清這一問題就在眼前,我目前的劇本,我相信封裝結構是給我的問題,因爲它是在程序的當前目錄編制。我正在尋找一種相對於包結構來編譯我的Java程序的方法。

也就是說,有沒有什麼辦法來檢測所需的編譯(在前面的例子CH01)的頂級目錄,而不必通過該計劃尋找package挖?

+0

*是*正常行爲 - 你想模擬(以及爲什麼)? –

+0

文件系統目錄結構總是反映java中的包結構。這個是正常的。請參閱http://download.oracle.com/javase/1.4.2/docs/tooldocs/windows/javac.html – mazaneicha

+0

@Dave Newton我的意圖是讓我的編譯腳本爲Notepad ++,gedit等檢測包結構jGRASP的方式非常無縫。 除了在程序中尋找'package'來執行此操作以外,還有其他方法嗎? – mellowmaroon

回答

0

我還不確定你想要什麼,這不適合評論。

jGRASP的行爲是正是正常行爲。 Java類文件(源文件和編譯類)都位於文件層次結構中,該文件層次結構映射其軟件包名稱。任何Java IDE或命令行構建工具(Ant,Maven,Gradle,無論什麼)都能理解這一點,並相應地運行。

如果你真的想重新發明輪子的那些,你的代碼需要做同樣的。如果您的Java源代碼嚴重不符合規範的程序包/文件層次結構,那麼您需要爲每個文件的package聲明詢問源代碼,並將編譯後的.class文件放入相應的目錄中。

javac-d選項設置輸出目錄。編譯後的類將根據其包名稱放在正確的位置。但是,編譯時,所有導入必須在類路徑中可用,無論是自己的類還是第三方庫(通常是jar)。

總之:不要做你在問什麼。我可以想到沒有理由這樣做。 (這並不意味着不是有什麼好的理由,但我......非常懷疑。)甚至可以使用相對罐裝的make文件來構建Java項目;一個更好的解決方案,即你提出的,但仍然是一個可怕的想法。

注:當你運行 Java應用程序,類文件必須存在於預期的層次,無論是裝在一個罐子(或戰爭)的文件,或在文件系統中。

+0

所以看起來好像沒有直接的方法。我很感激這個幫助,我只是想讓我的編程腳本更具可擴展性。 我會贊成,但似乎我沒有足夠的聲譽。 – mellowmaroon

+0

@ M.Cain你可以[接受](http://meta.stackexchange.com/questions/5234/how-does-accepting-an-answer-work),但我不相信我回答了這個問題。在一個腳本中,你需要做的只是一個帶有'xargs'和一些文件名操作的'find'。我不能推薦你不這樣做。 –

+0

對,我會堅持使用IDE來處理軟件包的程序。 但是,還有一件事,jGRASP如何輸出相關的包裝結構?這就是讓它看起來好像有一種更直接的方式將它包含在腳本中。 – mellowmaroon