簡體   English   中英

Java編譯,程序包和相對路徑

[英]Java Compilation, Packages, and Relative Paths

使用jGRASP時,我注意到程序包中程序的輸出與正常輸出略有不同,特別是程序名稱似乎是從類頂部開始的相對路徑。

例如,對於包含語句package ch01.stacks;的Java程序package ch01.stacks; ,編譯輸出如下所示:

 javac -g ch01\stacks\ArrayStack.java

運行結果顯示類似。

我想知道是否存在相對簡單的方法來在其他程序(例如Notepad ++或gedit)中模擬這種行為,用戶可以在其中設置腳本來編譯程序。

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

為了進一步闡明當前的問題,我相信使用當前的腳本,程序包結構會給我帶來問題,因為它正在程序的當前目錄中進行編譯。 我正在尋找一種相對於程序包結構相對編譯Java程序的方法。

也就是說,有什么方法可以檢測編譯所需的頂層目錄(在前面的示例中為ch01 ),而無需在程序中尋找package

我仍然不確定您想要什么,因此不適合置評。

jGRASP的行為恰好是正常行為。 Java類文件(包括源類和已編譯類)都位於反映其包名稱的文件層次結構中。 任何Java IDE或命令行構建工具( AntMavenGradle等等)都可以理解這一點,並表現出相應的行為。

如果您真的希望重新發明這些輪子,那么您的代碼也需要這樣做。 如果您的Java源代碼嚴重不在規范的包/文件層次結構中,則可以,您需要為每個文件的package聲明查詢源代碼,並將已編譯的.class文件放入相應的目錄中。

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

簡而言之:不要做您想問的事情。 我認為沒有充分的理由這樣做。 (這並不意味着沒有任何充分的理由,但是我……對此表示高度懷疑。)甚至可以使用相對罐頭的make文件來構建Java項目。 更好的解決方案,但仍是一個可怕的主意。

注意: 運行 Java應用程序時,無論打包在jar(或war)文件中還是文件系統中,類文件都必須存在於預期的層次結構中。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM