Zinc is a standalone version of sbt's incremental compiler meant to be run in nailgun.
—
Core compiler creation, caching, and incremental compilation execution functionality.
Factory methods for creating and managing compiler instances with caching support.
/**
* Get or create cached compiler instance
* @param setup Compiler configuration and jar locations
* @param log Logger for compilation messages
* @return Compiler instance (cached or newly created)
*/
def apply(setup: Setup, log: Logger): Compiler
/**
* Java API for getting or creating compiler instance
* @param setup Compiler configuration and jar locations
* @param log Logger for compilation messages
* @return Compiler instance (cached or newly created)
*/
def getOrCreate(setup: Setup, log: Logger): Compiler
/**
* Create new compiler instance (bypassing cache)
* @param setup Compiler configuration and jar locations
* @param log Logger for compilation messages
* @return New compiler instance
*/
def create(setup: Setup, log: Logger): CompilerCreate Scala compiler instances with proper configuration.
/**
* Create new Scala compiler instance
* @param instance Scala instance with compiler jars
* @param interfaceJar Compiler interface jar file
* @return Analyzing compiler for Scala compilation
*/
def newScalaCompiler(instance: ScalaInstance, interfaceJar: File): AnalyzingCompilerCreate Java compiler instances for mixed compilation.
/**
* Create new Java compiler instance
* @param instance Scala instance for compatibility
* @param javaHome Optional Java home directory
* @param fork Whether to fork Java compiler process
* @return Java compiler instance
*/
def newJavaCompiler(instance: ScalaInstance, javaHome: Option[File], fork: Boolean): JavaCompilerCreate and manage compiler caches for performance optimization.
/**
* Create resident compiler cache
* @param maxCompilers Maximum number of cached compilers
* @return Globals cache for compiler instances
*/
def createResidentCache(maxCompilers: Int): GlobalsCacheManage Scala compiler instances and classloaders.
/**
* Create Scala instance from setup configuration
* @param setup Setup containing Scala jar locations
* @return Scala instance for compilation
*/
def scalaInstance(setup: Setup): ScalaInstance
/**
* Create Scala classloader from jar files
* @param jars Scala jar files (compiler, library, extras)
* @return URL classloader for Scala classes
*/
def scalaLoader(jars: Seq[File]): URLClassLoader
/**
* Extract Scala version from classloader
* @param scalaLoader Scala classloader
* @return Optional Scala version string
*/
def scalaVersion(scalaLoader: ClassLoader): Option[String]Manage compiler interface compilation and caching.
/**
* Get or compile compiler interface
* @param setup Setup with interface source location
* @param scalaInstance Scala instance for compilation
* @param log Logger for interface compilation
* @return Compiled interface jar file
*/
def compilerInterface(setup: Setup, scalaInstance: ScalaInstance, log: Logger): File
/**
* Generate interface identifier for caching
* @param scalaVersion Scala version string
* @return Interface identifier string
*/
def interfaceId(scalaVersion: String): StringExecute incremental compilation with full configuration.
/**
* Execute incremental compilation
* @param inputs Compilation inputs (sources, classpath, options)
* @param cwd Optional working directory
* @param reporter Reporter for compilation messages and errors
* @param progress Progress tracker for compilation phases
* @param log Logger for compilation messages
*/
def compile(inputs: Inputs, cwd: Option[File], reporter: xsbti.Reporter,
progress: xsbti.compile.CompileProgress)(log: Logger): UnitAutomatic classpath generation for compilation.
/**
* Generate automatic compilation classpath
* @param classesDirectory Output directory for compiled classes
* @param allScalaJars All Scala-related jar files
* @param javaOnly Whether this is Java-only compilation
* @param classpath Base classpath entries
* @return Complete classpath for compilation
*/
def autoClasspath(classesDirectory: File, allScalaJars: Seq[File],
javaOnly: Boolean, classpath: Seq[File]): Seq[File]import org.pantsbuild.zinc._
import org.pantsbuild.zinc.logging._
import java.io.File
// Create compiler setup
val settings = Settings.parse(args.toSeq).get
val setup = Setup(settings)
val log = Loggers.create(Level.Info, color = true)
// Get cached compiler instance
val compiler = Compiler(setup, log)
// Prepare compilation inputs
val inputs = Inputs(log, settings)
val reporter = Reporters.create(log, Seq.empty, Seq.empty)
val progress = new SimpleCompileProgress(true, true, 10, log)
// Execute compilation
compiler.compile(inputs, Some(new File(".")), reporter, progress)(log)val CompilerInterfaceId: String // Default compiler interface identifier
val JavaClassVersion: String // Java class version requirementInstall with Tessl CLI
npx tessl i tessl/maven-org-pantsbuild--zinc