我正在尝试使JavaCC插件与Gradle一起正常工作。该插件可以正确生成.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类,那么一切就可以了:)
只是以这种方式尝试了示例,它就可以工作。
顺便说一句,感谢您对插件的贡献。