你有兩個問題需要齊頭並進。讓我們從元數據開始。瞭解如何跟蹤IDE的項目元數據的最佳方法是查看已建立的項目如何嘗試去做。
Eclipse和Netbeans都使用項目根目錄中創建的項目文件夾來保存元數據(Eclipse中的.settings
,Netbeans中的.nbproject
)。源數據文件,編譯器目標目錄,源代碼等元數據保存在元數據文件中,主要是XML。
您可能會想要遵循類似的內容,然後考慮添加常見項目原型,如/src
和/classes
或/src/main/java
和/target
。這導致您的問題的第二部分,編譯。
Netbeans本身並不直接使用編譯器。 Eclipse的確如此,但這是因爲Eclipse有其自己的內部編譯器實現來提供額外的警告和配置,這在默認編譯器中是不可用的。對於你的IDE,我會看看Netbeans如何管理它的項目並編譯它們。 Netbeans使用Ant和內部文件build.xml
而不是調用javac
。如果您對Ant不熟悉,它只是一個工具,它允許您設置可由Ant解釋和運行的XML任務。例如,您可以使用Ant編譯Java源代碼,生成文檔並創建分發JAR。這是一個非常強大的工具,可以讓您將整個構建過程自動化爲一種腳本。
你可以遵循這個相同的想法。您的IDE中的新項目將具有默認的build.xml
文件,該文件將使用一些默認的Ant目標構建其項目。您也可以從build.xml
中訪問屬性文件,以便您可以將有關源目錄的信息以及您想在構建腳本中使用的任何其他可定製信息存儲在屬性文件中,並將其導入構建腳本中。這是一個示例設置。
文件結構:
| Project root/
| .myideproject/
| build.xml
| project.properties
| ui.properties
| classes/
| <compiled .class files>
| doc/
| <generated javadoc files>
| lib/
| <3rd-party .jar files needed for compilation>
| src/
| <user .java files>
的build.xml
文件是什麼使用你的IDE編譯的事情。你可以要求用戶安裝Ant(一個快速和無痛的過程),或者你可以像Netbeans那樣捆綁它(更適合你)。在這兩種情況下,如果你嵌套你build.xml
的.myideproject
目錄內,您的構建文件將是這樣的:
<project name="<User's project name>" default="compile" basedir="..">
<!-- ... -->
</project>
注意兩兩件事:
- 「用戶的項目名稱」由用戶提供當他們創建項目時。
- 「default」屬性將指向構建文件中的目標。
- 「basedir」屬性將重新構建構建過程,以便它指向項目根目錄,而不是
.myideproject
。
接下來你需要導入project.properties
文件(ui.properties
是爲您節省UI相關的數據,而不是用於構建腳本,project.properties
包含一切的構建腳本需要正常運行)。這是你如何導入屬性到您的Ant項目:
<project ... >
<import file=".myideproject/project.properties" />
<!-- ... -->
</project>
這將使所有在project.properties
可使用指令${propname}
屬性。現在,src
和classes
是在project.properties
文件配置的目錄,我們可以在我們compile
目標使用它們,就像這樣:
<target name="compile">
<javac srcdir="${src}"
destdir="${target}"
classpath="${classpath}"
source="${src.jdk}"
target="${target.jdk}"
debug="on"
debugLevel="lines,vars,source" />
</target>
對於上述目標中,屬性文件可能是這個樣子:
# delimits source directories containing .java files using ':'
src=src1:src2
# only 1 directory, it's where the .class files go
target=classes
# ':'-delimited list of jars or globs which are needed for compilation
classpath=lib/*
# Determines the -source value on the javac process
src.jdk=1.6
# Determines the -target value on the javac process
target.jdk=1.6
評論只是爲了清楚。此屬性文件將使用用戶輸入從IDE的UI中構建,因此如果他們添加或刪除源文件夾,則屬性文件中的值src
會自動更改,然後他們可以重建該過程。
這應該足以讓你開始。有些事情要考慮:
- 你會需要使用該
java
任務由IDE設置屬性來告訴它一起使用的主要方法,類run
目標。
- 您可能還想考慮對Maven項目的支持,以幫助用戶自動解決依賴關係。這對你來說可能會更好,你應該等待,直到你完成了對Ant的支持。
- 你需要將Ant進程中的standard-out/err/in重定向到用戶可以與之交互的東西。你不必支持標準的,但根據您的評論你至少應該支持標準輸出/犯錯
最後一句話:你要使用JTree
與擴展DefaultMutableTreeNode
定製節點類創建視圖,但它並不必須是文件結構這麼多隻是一個項目的視點的視點,所以也許它可能是這樣的:
+ Project 1 Name
| + Source Folder 1
| <.java files>
| + Source Folder 2
| <.java files>
| + Source Folder 3
| <.java files>
+ Project 2 Name
| + Source Folder 1
| <.java files>
| + Source Folder 2
| <.java files>
| + Source Folder 3
| <.java files>
結構可以根據在文件系統上,但只顯示用戶需要的信息,如他的源目錄。你可以從那裏擴展這個想法。
祝你好運,聽起來像一個有趣的項目。希望我的建議能夠幫助你。讓我知道是否需要澄清。
對於最後一個問題,現代IDE通過讓開發人員指定哪個目錄是源目錄的根目錄(如src或src/main/java)來解決此問題。 – Brian
嗯,這是尷尬,我不知道當我打字時我在想什麼...我打算詢問有關存儲目錄和文件的位置,包括會話之間的位置。我知道它必須是某種屬性文件,可能是XML?我從來沒有見過這樣的屬性文件,它似乎就像每個項目的XML文件,因爲我建議如果不小心,可能會變得雜亂無章並且佔用一部分用戶文件系統。如果用戶打開保存的文件,我希望整個項目加載到屏幕左側的JList或JTree中以進行特定處理。什麼是最好的方式來做到這一點? –
我已經發布了一些建議和想法的答案。 – Brian