Быстрая компиляция Scala кода с помощью Maven

Если Вы когда либо работали с Scala(например для работы со Spark Streaming), то вы очень быстро поняли, что компиляция кода занимает очень много времени. Есть много причин, по которым scalaс так долго компилирует код.
  Но всётаки есть варианты, как сделать компиляцию кода быстрее. Многие используют инкрементный режим в sbt(Simple Build Tools) как решение этого вопроса. В этом режиме sbt остаётся запущеным и ему не нужно тратить время на запуск JVM каждый раз, когда нужно скомпилировать код.
  Кроме sbt остаётся очень много пользователей Maven-a как инструмента для компиляции кода. Поэтому появился zinc, который является автономной версией sbt c инкрементой компиляцией.
 Забегая на перёд скажу, что zinc вместе с mvnsh даёт намного лучший результат чем стандартный maven. 
Давайте поставим и проверим это на своём коде:

Устанавливаем Zinc с сайта: https://github.com/typesafehub/zinc:
cd /usr/local/src/
wget http://downloads.typesafe.com/zinc/0.3.9/zinc-0.3.9.tgz
tar -zxvf zinc-0.3.9.tgz 
ln -s /usr/local/src/zinc-0.3.9/bin/zinc /usr/local/bin/zinc
zinc -start

Далее скачиваем и устанавливаем mvnsh:
cd /usr/local/src/

wget http://repo1.maven.org/maven2/org/sonatype/maven/shell/dist/mvnsh-assembly/1.1.0/mvnsh-assembly-1.1.0-bin.tar.gz     
tar -xzvf mvnsh-assembly-1.1.0-bin.tar.gz
ln -s /usr/local/src/mvnsh-1.1.0/bin/mvnsh /usr/local/bin/mvnsh

Конфигурация Maven проекта для использования сервера Zinc:
<build>
        <plugins>
            <plugin>
                <groupId>net.alchim31.maven</groupId>
                <artifactId>scala-maven-plugin</artifactId>
                <version>3.2.1</version>
                <executions>
                    <execution>
                        <goals>
                            <goal>compile</goal>
                            <goal>testCompile</goal>
                        </goals>
                        <configuration>
                            <args>
                                <arg>-make:transitive</arg>
                                <arg>-dependencyfile</arg>
                                <arg>${project.build.directory}/.scala_dependencies</arg>
                            </args>
                        </configuration>
                    </execution>
                    <execution>
                        <id>scala-test-compile</id>
                        <phase>process-test-resources</phase>
                        <goals>
                            <goal>testCompile</goal>
                        </goals>
                    </execution>
                </executions>
                <configuration>
                    <jvmArgs>
                        <jvmArg>-Xss2m</jvmArg>
                    </jvmArgs>
                    <recompileMode>incremental</recompileMode>
                    <useZincServer>true</useZincServer>
                </configuration>
            </plugin>
        </plugins>
</build>


Компиляция проекта:
  • Запустите zinc в терминале zinc -start
  • Запустите mvnsh в терминале mvnsh
  • В mvnsh используйте стандартные команды как maven-e
Первая сборка или сборка после команды 'mvn clean' по прежнему будет занимать столько же времени, но все последующие сборки будут намного быстрее. Если Вы забудете запустить zinc, то maven будет использовать стандартный компилятор.

Полезные ссылки:
Fast Scala Compilation with Maven

Коментарі

Популярні дописи з цього блогу

Минимальные требование для кластера Hadoop(with Spark)

Apache Spark - основные команды

Apache Spark Resource Management и модель приложений от YARN