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.