簡體   English   中英

gradle生成的文件無法編譯

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM