2017-07-18 70 views
0

我是JAXB的新手,正在使用IntelliJ。我正在關注一個在線教程。在我學習Marshall/UnMarshall的時候,我已經下載了源代碼。在編組示例類中,我嘗試導入已自動生成的存根,但在嘗試將它用作JAXBContext.newInstance(Patient.class)的參數時,IntelliJ無法識別Patient.class的導入:無法識別的在IntelliJ中導入自動生成的JAXB存根

enter image description here

我試過無效緩存並重新啓動。演示使用Eclipse。當我嘗試使用IntelliJ中的新項目時,我注意到演示中的.classpath文件不是自動生成的。

  1. 是什麼導致導入問題?
  2. 這對JAXB項目來說仍然是一個通用/正確的項目結構嗎?

感謝

新截圖如下建議的解決方案:

enter image description here

+0

究竟是什麼執行了「自動生成」? –

回答

1

這是因爲在你的項目的根源代碼目錄是src/main/java和生成的類都在src/generated/com...。您可以將src/generated目錄設置爲源目錄,方法是右鍵單擊 - >將目錄標記爲 - >源根目錄。

或者您可以將生成的類移動到src/main/java/com...之下。我建議做第二個選擇。

在新問題後編輯: 所以你使用jaxb2來生成這些類。我認爲你應該這樣設置:<generateDirectory>${project.basedir}/src/main/java</generateDirectory>沒有在路徑中generated文件夾。由於您的類中的包名稱以com.bharatthippireddy...開頭,而不是generated.com.bharatthippireddy...,因此在源根目錄中必須有com文件夾。我認爲即使存在META-INForg樹,它也應該可以工作。我不知道如何忽略那些樹的生成,可能是JAXB2文檔中包含的一些線索。

+0

謝謝。第一個解決方案按照解釋的工作第二個答案似乎是最佳實踐,因爲它創建了更典型的文件結構。但是,我正在使用mvn clean package命令,這會生成'com','META-INF'和'org'頂級結構,這不起作用。什麼應該是在maven中定義這個的正確方法?我將更新原始文章中的屏幕截圖 – Steerpike

+0

@Steerpike也許你可以用' false' –

+0

來省略META-INF代,謝謝你,但我認爲問題在於Patient.class不能在JAXBDemo中導入.class運行maven clean package的目標時 - 交付的結構不允許導入 – Steerpike