2013-10-08 35 views
1

我正忙於爲自定義註釋處理器編寫集成測試。爲了做到這一點,我有一組特定的.java源文件,我通過javac運行,以測試我的實現。這些作爲資源被我的測試加載。這意味着,我的源代碼樹看起來像下面這樣:IntelliJ IDEA - 如何將.java文件複製爲資源?

/src 
    /test       [test source root] 
    /java 
     MyIntegrationTest.java  [actual source code] 
    /resources 
     MyIntegrationClassFile.java [should be treated as plain text] 

用的IntelliJ,它可以過濾複製與使用編譯器設置的資源是什麼文件。所以我刪除了.java文件的過濾器。

但是,對於要複製的資源,它們需要位於標記的源代碼樹中。我也有我的資源文件夾標記爲測試來源(是的,這很奇怪)。

問題出在這裏:如果.java文件在源代碼樹中(爲了作爲資源複製),它們會自動編譯。我不想編譯這些文件(它們可能不會編譯)。

我已經嘗試將資源添加到編譯器排除列表(不從項目中排除它),但這也會導致資源不被複制。

就我所知,您不能將.java文件標記爲純文本,即使此功能是針對其他文件類型記錄的。

如何將.java文件標記爲應該被複制且未編譯的純文本內容?

+0

您使用的是maven嗎? –

+0

+1我有一個類似的問題,我無法改變一個項目。在這種情況下,它是不能通過設計進行編譯的代碼,以顯示它將被正確地動態編譯(或者具有預期的錯誤),IntelliJ完全不喜歡它。 Maven構建正確並複製資源。 –

+0

@PeterLawrey同樣,我正在做的代碼生成,將導致文件編譯罰款。 – LostSalad

回答

1

對我來說,它工作時,我將資源文件夾添加到編譯器排除列表。

初始設置:

enter image description here

重建項目給了我這樣的輸出:

enter image description here

現在我添加src/test/resources編譯器排除列表:

enter image description here

重建後,我有這個在我的輸出文件夾:

enter image description here

+0

感謝您的詳細解答。當我回家時,我會嘗試重現這一點。您是否也可以參考資源排除模式的設置?它默認設置爲忽略.java文件,但我認爲你刪除了它。 – LostSalad

+0

我試過這個,我的結果與你的不同。我最終得到了「IntegrationTest.class」和「IntegrationTest.java」。資源文件夾仍然被忽略。我看到你有一個pom.xml。如果你使用Maven構建版本,它可能會工作。當我使用Gradle構建時,一切都按預期工作。 – LostSalad

0

使用理念2016年3月3日,到項目結構>來源>測試>資源,然後右鍵單擊它並選擇TestResources。

然後將排除規則添加到您的資源文件夾的設置>構建,執行,部署>編譯器>排除。

也從設置>構建,執行,部署>編譯器>資源模式(你已經這樣做了,因爲我可以看到)刪除.java擴展。

它的工作原理!

相關問題