[英]gradle generated files fail to compile
我正在嘗試使用Gradle使JavaCC插件正常工作。 該插件正確生成.java
文件,但隨后在compileJavaC
任務期間崩潰並燒毀, cannot find symbol
錯誤。 我的JavaCC .jj
文件包含引用其他未生成的java文件的代碼,我猜測compileJava
任務嘗試編譯生成的代碼而不提供對非生成代碼的引用。
這是一個最小的破壞性例子。 的build.gradle:
apply plugin: 'java'
//compile .jj file in src/main/javacc
buildscript {
repositories {
mavenCentral()
}
dependencies {
classpath group: 'ca.coglinc', name: 'javacc-gradle-plugin', version: '1.0.0'
}
}
apply plugin: 'javacc'
的src / main / MyClass.java:
public class MyClass {
public MyClass(){
}
}
和src / main / javacc / MyParser.jj:
options
{}
PARSER_BEGIN(MyParser)
import java.util.*;
public class MyParser {
public static void main(String[] args) throws ParseException {
MyClass mc = new MyClass();
}
}
PARSER_END(MyParser)
SKIP:
{
" "
}
TOKEN:
{
<ANYTHING: ~[]>
}
void production():
{}
{
(<ANYTHING>)+
}
運行gradle build
提供以下內容:
gradle build
:compileJavacc
Java Compiler Compiler Version 5.0 (Parser Generator)
(type "javacc" with no arguments for help)
Reading from file C:\Users\Nate Glenn\Desktop\java_workspace\test-gradle-javacc\
src\main\javacc\MyParser.jj . . .
File "TokenMgrError.java" does not exist. Will create one.
File "ParseException.java" does not exist. Will create one.
File "Token.java" does not exist. Will create one.
File "SimpleCharStream.java" does not exist. Will create one.
Parser generated successfully.
:compileJavaC:\Users\Nate Glenn\Desktop\java_workspace\test-gradle-javacc\build\
generated\javacc\MyParser.java:5: error: cannot find symbol
MyClass mc = new MyClass();
^
symbol: class MyClass
location: class MyParser
C:\Users\Nate Glenn\Desktop\java_workspace\test-gradle-javacc\build\generated\ja
vacc\MyParser.java:5: error: cannot find symbol
MyClass mc = new MyClass();
^
symbol: class MyClass
location: class MyParser
2 errors
FAILED
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug
option to get more log output.
BUILD FAILED
Total time: 9.002 secs
如何修復我的Gradle構建文件,以便在編譯生成的文件時javaCompileC
正確包含非生成的文件?
您的MyClass源代碼樹不正確。 它應該是src / main / java / MyClass.java。 在gradle中,就像maven一樣,約定是java文件默認位於src / main / java中,並且因為你沒有在build.gradle文件中覆蓋它,所以我認為這只是你的錯誤。 該插件正確地將JavaCC輸出路徑添加到compileJava任務的類路徑中,因此如果您在compileJava任務的正確路徑中創建java類,一切都應該沒問題:)
只是嘗試了這種方式,它的工作原理。
順便說一句,感謝您對插件的貢獻。
只是一些額外的FYI,如果你想覆蓋編譯路徑,你可以這樣做:
//customized source sets to over-write the default src/main/java path
sourceSets {
main{
java {
srcDir 'Java Source'
}
resources {
srcDir 'resources'
}
}
test {
java {
srcDir 'tests'
}
}
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.