/zinc

sbt's scala incremental compiler

Primary LanguageScala

Zinc

Zinc is a stand-alone version of sbt's incremental compiler.

Download the latest stable version.

Status

Attention: There is a new effort concerning the development of zinc, which is hosted at sbt zinc.

Zinc is currently in a maintenance mode. There's no active development of new features. New releases are meant to stay up-to-date with latest sbt releases. Zinc tries to follow final releases of sbt. It doesn't follow milestone releases but exceptions can be introduced on a case-by-case basis.

Maintenance of zinc is performed on a best-effort terms. We try our best to not lag behind sbt with zinc releases but we do not guarantee it. Occasional delays can happen due to other priorities.

If you are interested in helping with zinc maintenance or development, please contact Adriaan Moors (@adriaanm) at Lightbend.

Build

Zinc is built using sbt 0.13. See development.md.

Previously published distributions up to 0.3.1-M1 relase can be found in the old zinc repo. Newer distributions are hosted under [Lightbend downloads].

Here's the table of final releases in 0.3.x series:

zinc version sbt version Download
0.3.13 0.13.13 zinc-0.3.13.tgz
0.3.12 0.13.12 zinc-0.3.12.tgz
0.3.11 0.13.11 zinc-0.3.11.tgz
0.3.9 0.13.9 zinc-0.3.9.tgz
0.3.8.1 0.13.8.1 zinc-0.3.8.1.tgz
0.3.8 0.13.8 zinc-0.3.8.tgz
0.3.7 0.13.7 zinc-0.3.7.tgz
0.3.6 0.13.6 zinc-0.3.6.tgz
0.3.5.3 0.13.5 zinc-0.3.5.3.tgz
0.3.5.2 0.13.5 zinc-0.3.5.2.tgz
0.3.5.1 0.13.5 zinc-0.3.5.1.tgz
0.3.5 0.13.5 zinc-0.3.5.tgz
0.3.2 0.13.2 zinc-0.3.2.tgz
0.3.1 0.13.1 zinc-0.3.1.tgz
0.3.0 0.13.0 zinc-0.3.0.tgz

Options

To get information about options run zinc -help.

Compile

As for scalac the main options for compiling are -classpath for specifying the classpath elements, and -d for selecting the output directory. Anything passed on the command-line that is not an option is considered to be a source file.

Scala

Zinc needs to locate the Scala compiler jar, Scala library jar, and any extra Scala jars (like Scala reflect). There are three alternative ways to specify the Scala jars.

Using -scala-home point to the base directory of a Scala distribution (which needs to contain a lib directory with the Scala jars).

Using -scala-path the compiler, library, and any extra jars (like scala reflect) can be listed directly as a path.

Using -scala-library to directly specify the Scala library, -scala-compiler to specify the Scala compiler, and -scala-extra to specify any extra Scala jars.

If no options are passed to locate a version of Scala then Scala 2.9.2 is used by default (which is bundled with zinc).

To pass options to scalac simply prefix with -S. For example, deprecation warnings can be enabled with -S-deprecation. For multi-part options add the -S prefix to all parts. For example, the sourcepath option can be specified with -S-sourcepath -S/the/source/path.

Java

To select a different javac to compile Java sources, use the -java-home option. To pass options to javac, prefix with -C.

If mixed Java and Scala sources are being compiled then the compile order can be specified with -compile-order, where the available orders are Mixed, JavaThenScala, or ScalaThenJava. The default order is Mixed.

If only Java sources are being compiled then the -java-only option can be added to avoid the Scala library jar being automatically added to the classpath.

Nailed

Zinc comes with built-in Nailgun integration. Running with Nailgun provides zinc as a server, communicating commands via a client, keeping cached compilers in a warm running JVM and avoiding startup and load times.

To run zinc as a build daemon add the -nailed option to all commands, or alias zinc="zinc -nailed".

Nailgun client binaries for common platforms are bundled with zinc. If an ng client is on the current path then this will be used instead.

To shutdown the zinc server run zinc -shutdown. To list currently cached zinc compilers use zinc -status.

Logging

The log level can be set directly with -log-level debug|info|warn|error. Or to set to debug use -debug. To silence all logging use -quiet.

Analysis

The analysis used to determine which files to incrementally recompile is stored in a file. The default location for the analysis cache is relative to the output directory. To specify a different location for the analysis cache use the -analysis-cache option. When compiling multiple projects, and the analysis cache is not at the default location, then a mapping from output directory to cache file for any upstreams projects should also be provided with the -analysis-map option.

Incremental Compiler

There are options for configuring the incremental compiler. One useful option is -transactional, which will restore the previous class files on compilation failure. This allows fixes to be made before retrying incremental compilation, rather than forcing recompilation of larger parts of the source tree due to the error and deleted class files.

See zinc -help for information about all options.

Contributions

Contributions via GitHub pull requests are gladly accepted from their original author. Before we can accept pull requests, you will need to agree to the Lightbend Contributor License Agreement online, using your GitHub account.

License

Copyright 2012 Lightbend, Inc.

Licensed under the Apache License, Version 2.0 (the "License"); you may not use this software except in compliance with the License. You may obtain a copy of the License at:

http://www.apache.org/licenses/LICENSE-2.0

Unless required by applicable law or agreed to in writing, software distributed under the License is distributed on an "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License.