Il flusso di attività scala plugin predefinito compila Java prima di Scala, quindi l'importazione di sorgenti Scala all'interno di Java causa "errore: impossibile trovare il simbolo". Compilare Scala prima/accanto a Java con Gradle
12
A
risposta
21
ho trovato la seguente configurazione sourceSet per risolvere il problema:
sourceSets {
main {
scala {
srcDirs = ['src/main/scala', 'src/main/java']
}
java {
srcDirs = []
}
}
Questo perché il set fonte scala può includere sia java e fonti Scala.
0
Se il codice java utilizza alcune librerie esterne come Lombok, l'uso del compilatore di scala per costruire la classe java avrà esito negativo, poiché il compilatore di scala non conosce le annotazioni.
La mia soluzione è di cambiare le dipendenze delle attività, effettuare la compilazione di Scala prima di Java.
tasks.compileJava.dependsOn compileScala
tasks.compileScala.dependsOn.remove("compileJava")
Ora il compito compileScala
viene eseguito prima di compileJava
, il gioco è fatto.
Se il codice Java dipende dal codice Scala, è necessario fare altri due passi,
separata la cartella di output di Scala e Java,
sourceSets { main { scala { outputDir = file("$buildDir/classes/scala/main") } java { outputDir = file("$buildDir/classes/java/main") } }
Aggiungere l'output Scala come una dipendenza per
compileJava
,dependencies { compile files("$sourceSets.main.scala.outputDir") }
Problemi correlati
- 1. Come compilare jar di sorgenti con gradle
- 2. Gradle - compileJava - rimuovi compilare Avvisi
- 3. Utilizzo di AndroidAnnotations con Scala e Gradle
- 4. Scala REPL in Gradle
- 5. Compilare a bytecode java (senza utilizzare Java)
- 6. Gradle Compilare l'errore "No Firma del metodo"
- 7. Gradle costruire con Java 8
- 8. Uso di Scala con Gradle per il progetto Android
- 9. Posso compilare un progetto Scala con java e scala codice misti con dipendenze in entrambi i modi in Maven?
- 10. Come compilare la libreria biforcuta in Gradle?
- 11. Compilare Scala codice 2.8.x con Apache Buildr
- 12. Sorgente Java Parse con Scala
- 13. Progetto Android Gradle con modulo Java 8
- 14. Applicazione console con Java e gradle
- 15. Estensione di Java Class con Scala Trait
- 16. Compilare un file Java ... con un programma Java
- 17. Java - Come compilare un singolo file con Java Eclipse
- 18. Traducendo wildcards generici da Java a Scala
- 19. Come compilare l'applicazione Scala Hello World
- 20. A partire da Gradle
- 21. Compilare un progetto con diversa compatibilità con la sorgente java
- 22. Compilare i file java programmaticamente
- 23. test continui con gradle
- 24. Compilare ed eseguire il codice Scala in fase di esecuzione
- 25. Infinite Gradle costruire esecuzione Java 8
- 26. migrazione da Java concorrenza a Scala concorrenza
- 27. per compilare file c con file .a
- 28. Come compilare il modulo NDK usando il plugin sperimentale gradle?
- 29. Uso di Scala riflesso con riflessione Java
- 30. Che cosa significa "@aar" significa in Gradle 'compilare' compito
Se si desidera mantenere le origini Java e Scala in directory separate e si desidera che tutto il codice sia compilato in comune, questa è la soluzione corretta. Un'alternativa è quella di mantenere la configurazione di default e mettere il codice Java compilato in "src/main/scala', e il codice Java rimanente (se presente) in' src/main/java'. –
Grazie. Ci chiediamo se il codice Java compilato con compileScala si comporti diversamente da quando compilato con compileJava. Supponiamo che usino lo stesso compilatore, quindi producano lo stesso bytecode sottostante, ma consentono il collegamento a scala sorgente. È corretto? – crizCraig
La compilazione comune è controllata dal compilatore Scala, che è responsabile del richiamo del compilatore Java in questo caso. Il risultato dovrebbe essere generalmente lo stesso. Nota che dovrai configurare 'compileScala.options' piuttosto che' compileJava.options' per influenzare le opzioni di compilazione Java del codice Java compilato congiuntamente. (Le opzioni di compilazione di Scala sono controllate tramite 'compileScala.scalaCompileOptions'.) Probabilmente vorrai applicare qualsiasi configurazione di questo tipo a tutte le attività di compilazione (ad esempio' tasks.withType (ScalaCompile) {options ...} '). –