Domanda

Voglio creare un'azione per automatizzare la compilazione GCJ. Dal momento che non riuscivo a farlo funzionare con Ant , ho deciso di provare SBT . La documentazione dicono come creare un azione e come eseguire un processo esterno. Quello che ancora non vedo è come riutilizzare l'albero di directory traversal che esiste per Java e compilatore Scala azioni. In questo caso i miei file di input sarebbero tutti i file .class sotto di una certa cartella principale. Vorrei anche necessario specificare un percorso di classe specifica per GCJ. Tutti gli indicatori di questo sarebbe apprezzato troppo.

È stato utile?

Soluzione

Non ho usato GCJ molto a tutti e sono ancora abbastanza nuovo a SBT, ma questo è come credo che si potrebbe scrivere un compito veloce per fare esattamente quello che stai cercando con SBT 0.7.1. È possibile utilizzare un PathFinder per afferrare tutti i file di classe in questo modo:

val allClasses = (outputPath ##) ** "*.class"

Utilizzando che PathFinder e il "compileClasspath" metodo di livello superiore, si può costruire un compito come questo che si protrarrà gcj usando classpath del progetto corrente e comporre tutti i file .class in uno gcjFile:

val gcj = "/usr/local/bin/gcj"
val gcjFile = "target/my_executable.o"

val allClasses = (outputPath ##) ** "*.class"

lazy val gcjCompile = execTask {
  <x>{gcj} --classpath={compileClasspath.get.map(_.absolutePath).mkString(":")}  -c {allClasses.get.map(_.absolutePath).mkString("-c ")} -o {gcjFile}</x>
} dependsOn(compile) describedAs("Create a GCJ executable object")
Autorizzato sotto: CC-BY-SA insieme a attribuzione
Non affiliato a StackOverflow
scroll top