2017-03-08 109 views
0

我目前正在使用Intellij 15.0.6中的Gradle 3.3項目。使用註釋處理器將XML資源生成到Classpath中

我正在使用Gradle APT plugin向我的類路徑添加註釋處理器。

它在生成Java類文件時工作正常,但是我需要能夠在生成目錄生成的目錄中相當於resources目錄中生成XML源。

這是目前我的build目錄結構:

Project Build Directory Image

正如你所看到的,它不包括resources目錄,我懷疑是什麼可能會導致此問題。

目前的例外,我從通過./gradlew assemble運行我的註釋處理器接收是:java.lang.IllegalArgumentException: Resource creation not supported in location CLASS_PATH

我用我的註釋處理器內生成XML文件中的代碼:

FileObject source = processingEnv.getFiler() .createResource(StandardLocation.CLASS_PATH, "", "ap-test-2.html");

注意:我使用HTML擴展作爲測試,XML應該產生相同的結果。

javax.tools.StandardLocation具有其它輸出位置,以及:

SOURCE_OUTPUT位置工作以將相同的封裝中生成的Java類中的XML,內src/apt/main。但這不是我想要的行爲。我需要它們駐留在類路徑中。

在廣泛的研究之後,我還沒有在其他任何地方發現過這個例外。

任何幫助表示讚賞。感謝您閱讀這個問題。

回答

1

StandardLocation.CLASS_PATH僅用於輸入,不輸出。唯一的輸出位置是SOURCE_OUPUTbuild/generated/source/apt/…文件夾),CLASS_OUTPUT(標準Gradle build/classes/…)和NATIVE_HEADER_OUPUT。請參閱https://docs.oracle.com/javase/8/docs/api/javax/tools/StandardLocation.html

JavaC沒有類與資源輸出的概念,但是如果您在編譯期間運行註釋處理器,那麼CLASS_OUTPUT應該可以工作(Gradle應該將所有內容都複製到最終目錄/ JAR中)。請參閱https://docs.oracle.com/javase/8/docs/technotes/tools/unix/javac.html

+0

感謝您的回覆。有趣的是,Intellij將'build'類路徑文件分爲兩個目錄:'classes'和'resources'。在將位置更改爲「CLASS_OUTPUT」後,我的處理器將HTML添加到'classes'目錄。我會進一步測試,讓你知道我找到了什麼。 –

+1

看來Intellij將這兩個目錄合併在一起並將它們添加到類路徑中,因此將該位置設置爲'CLASS_OUTPUT'應該在理論上工作。我會嘗試讓我的處理器與MVP一起工作,以驗證是否屬於這種情況。 –