Компиляция Scala до / вместе с Java с помощью Gradle

Например, не так ли много раз, когда мы хотим иметь объекты с этими именами?

2ndInning
3rdBase
4thDim
7thDay

Но представьте, когда кто-то попытается получить переменную с именем 666:

int 666 = 777;
float 666F = 777F;
char 0xFF = 0xFF;
int a = 666; // is it 666 the variable or the literal value?
float b = 666F // is it 666F the variable or the literal value?

Возможно, одним из способов, который мы могли бы подумать, является то, что переменные, начинающиеся с цифры, должны заканчиваться алфавитом - до тех пор, пока он не начинается с 0x и заканчивается буквой, используемой как шестнадцатеричная цифра, или она не конец с такими символами, как L или F и т. д. и т. д.

. Но такие правила сделали бы очень трудным для программистов, как заметил Йоги Берра - как вы могли думать и удариться одновременно? Вы пытаетесь написать компьютерную программу как можно быстрее и без ошибок, а затем вам придется беспокоиться обо всех этих небольших кусках. Я бы предпочел, чтобы программист имел простое правило о том, как следует указывать переменные.

В моих усилиях, использующих лексеры и регулярное выражение для анализа журналов данных и потоков данных для вставки в базы данных, я не обнаружил, ключевое слово или переменная, начинающаяся с цифры, затрудняла бы синтаксический анализ - так долго существует как можно более короткий путь, чтобы устранить двусмысленность.

Следовательно, это не так просто, как облегчить компилятор, но для программиста.

17
задан crizCraig 24 April 2014 в 06:09
поделиться

1 ответ

Если ваш java-код использует некоторые внешние библиотеки, такие как Lombok, использование компилятора scala для создания java-класса завершится неудачей, так как компилятор scala не знает аннотации.

Мое решение - изменить зависимости задачи, сделать компиляцию Scala перед Java.

tasks.compileJava.dependsOn compileScala
tasks.compileScala.dependsOn.remove("compileJava")

Теперь задача compileScala выполняется до compileJava, вот и все.

Если ваш Java-код зависит от Scala-кода, вам нужно сделать еще два шага,

  1. Разделить выходную папку Scala и Java,

    sourceSets {
        main {
            scala {
                outputDir = file("$buildDir/classes/scala/main")
            }
            java {
                outputDir = file("$buildDir/classes/java/main")
            }
        }
    
  2. Добавьте вывод scala в качестве зависимости для compileJava,

    dependencies {
        compile files("$sourceSets.main.scala.outputDir")
    }
    
.
2
ответ дан Longjun 24 April 2014 в 06:09
поделиться
Другие вопросы по тегам:

Похожие вопросы: