我使用Maven構建項目並編譯失敗了,因爲我把Test.java
類Test2
,類className必須在className.java中編碼嗎?
,但由於它的Maven或僅僅是因爲Java本身不支持呢?
順便說一句,我怎樣才能用eclipse打開maven項目?
我使用Maven構建項目並編譯失敗了,因爲我把Test.java
類Test2
,類className必須在className.java中編碼嗎?
,但由於它的Maven或僅僅是因爲Java本身不支持呢?
順便說一句,我怎樣才能用eclipse打開maven項目?
一個public
類稱爲ClassName
必須(在大多數情況下)在一個文件中定義了一個名爲ClassName.java
。
編輯
雖然這不是Java語言的要求,大部分(如果不是全部)的Java實現,類名和文件名之間的上述關係必須持有,或編譯器錯誤將導致。
(有關詳細信息,請參閱Jon Skeet's answer。)
其原因可以通過讀取的The Java Language Specification, Third EditionSection 7.2: Packages被發現。
在本節中,它描述瞭如何將目錄結構映射到Java中的fully-qualified class name,這導致包含類的字節碼的.class
文件必須駐留在類似於完全合格的課程名稱。
錯誤地表明命名方案是一項要求的原始答案已被編輯。
Java要求您將公用類放在具有相同名稱的文件中。
用於eclipse和maven使用sonatype m2插件。裏面你的Maven項目,你可以再鍵入
mvn eclipse:eclipse
和Maven將創建一個.project
和.classpath
文件給你。這些是日食需要與項目一起工作的文件。
您必須使用本地maven存儲庫的路徑定義eclipse classpath變量M2_REPO
。
隨着Sonatype的M2你可以從Eclipse中做行家的事情:添加依賴,運行Maven目標,...
m2eclipse插件與maven-eclipse-plugin沒有任何關係。如果你使用前者,你不必運行'mvn eclipse:eclipse'。如果你使用後者,你不必使用m2eclipse。 – 2010-05-16 11:10:44
似乎我可以直接運行'mvn eclipse:eclipse'而不需要安裝sonatype me插件? – httpinterpret 2010-05-16 11:11:20
@ pascal-thivent:是的,你是完全正確的。我加了m2,因爲它在eclipse中使事情變得更容易。但我錯過了說這是兩個截然不同的話題。 – tangens 2010-05-16 11:13:31
我使用Maven構建項目並編譯失敗了,因爲我把類的Test2在Test.java,
源文件必須在公共類它們包含的名字命名,追加後綴.java
。在你的情況下,公共類Test2
的源文件必須是Test2.java
。
是因爲maven還是因爲java本身不支持這個?
Java編譯器javac
抱怨,而不是Maven(Maven不會改變編譯器的行爲)。
我該如何使用eclipse打開maven項目?
要麼使用Maven Eclipse Plugin(Maven的即插件),只是對項目運行的mvn eclipse:eclipse
然後導入...它作爲現有項目到工作區在Eclipse。您將需要設置一個指向本地存儲庫的類路徑變量M2_REPO來使用它。查看Usage頁面瞭解詳情。
或(和這是一個獨家或)安裝m2eclipse(即Eclipse的插件,擴展它,使其能夠了解一個Maven項目,並與它在一個雙向的方式進行交互)和進口..您的項目爲現有Maven項目。
如果EXCLUSIVE不夠清楚,這意味着:使用一個或另一個,但不是在同一時間。
正如Jon Skeet所述,JLS 允許這個基於文件的實現的限制。這不適用於使用數據庫來存儲Java構造(如Visual Age for Java所做的那樣)。但就你而言,它確實如此。
我不認爲m2eclipse可以工作,因爲在生成的'.project'中有這樣的註釋。 – httpinterpret 2010-05-16 11:51:33
'
@httpinterpret我明確地寫道,他們是獨佔的,你使用一個或另一個,而不是在同一時間。我不能更清楚,只是仔細閱讀。 – 2010-05-16 11:56:57
Java語言規範本身並不實際要求這 - 但它明確允許基於文件系統的實現這樣做,而且大多數情況下。
當包存儲在文件系統 (第7.2.1節),主系統可以 選擇強制執行 是,如果一個編譯時錯誤的限制型 未在文件下類型名稱組成名稱 加上 擴展實測值(如的.java或.jav)如果 下面的任一爲真:
- 該類型由 其他類型的聲明包 的編譯單元中的代碼引用。
- 類型聲明爲public(因此 可能從 其他程序包中的代碼訪問)。
此限制 意味着必須有在每編譯單元最多一個 這樣類型。這種限制使得 編譯器可以很容易地使用Java編程 語言或者使用 Java虛擬機的實現在包中找到一個名爲 的類;例如, 爲公共 類型wet.sprocket.Toad源代碼將在 文件Toad.java在目錄 溼/鏈輪發現,對應的 對象代碼將在文件 蟾蜍找到。班級在同一個目錄中。
當軟件包存儲在數據庫 (第7.2.2節)中時,主機系統不允許 施加此類限制。在實踐中,許多程序員選擇將每個 類或接口類型放入其自己的 編譯單元中,而不管它是否爲 public或由其他編譯單元中的代碼引用 。
對於實際的目的我認爲這是合理的,基本上認爲它是必需的。
文件名和類名之間的連接如下:
public class
,文件名必須是相同的類名
不知道Maven,但類名應該與編譯單元(^ .java)匹配,否則這將導致失敗。 – 2010-05-16 11:03:11
另外,班級名稱應以大寫字母開頭。 – Kobi 2010-05-16 11:04:58
請一次只問一個問題。 – tangens 2010-05-16 11:05:08