А между тем, сборка в память обладает двумя очень значительными преимуществами:
- Значительное увеличение скорости сборки за счет отсутствия операций ввода-вывода на жесткий диск
- Увеличение времени жизни вашего SSD за счет перемещения интенсивных операций записи в память
Если учесть, что в последние годы сильно вырос объем оперативной памяти на компьютере среднестатистического разработчика и повсеместно начинают применяться SSD, то аргументов «против» практически не остается.
Главная цель этой небольшой статьи — вызвать мысль: «А ведь действительно! И как я раньше об этом не подумал?».
Я опишу пример реализации такого подхода в Linux. Действия в других операционных системах будут практически идентичными, за исключением методов создания самого RAM-диска.
Создание RAM-диска
Отредактируем файл /etc/fstab при помощи вашего любимого редактора, например:
gksudo -k gedit /etc/fstab
Добавим в него сроку
tmpfs /tmp tmpfs mode=1777 0 0
Я предпочитаю монтировать на RAM-диск папку /tmp и в ней же собирать все проекты, это дает дополнительное преимущество — временные файлы других программ также не используют SSD-диск. Дополнительным радостным фактом является то, что весь мусор удаляется автоматически при перезагрузке компьютера.
Настройка Maven
Для начала необходимо ввести в корневой pom-файл проекта дополнительный параметр, который будет указывать на папку сборки и нацелить его на папку сборки по умолчанию. Это делается для того, чтобы необходимые вам изменения не коснулись других разработчиков.
<project> ... <properties> <target.directory>${basedir}/target</target.directory> </properties> ... <build> <directory>${target.directory}</directory> ... </build> ... </project>
Также следует обратить внимание на другие места в pom-файлах проекта, которые могут использовать ${basedir}/target.
Например на
<plugin> <groupId>org.eclipse.jetty</groupId> <artifactId>jetty-maven-plugin</artifactId> <version>9.0.6.v20130930</version> <configuration> <war>${target.directory}/myproject-web</war> <classesDirectory>${target.directory}/classes</classesDirectory> <webAppSourceDirectory>${basedir}/src/main/webapp</webAppSourceDirectory> <webApp> <contextPath>/</contextPath> <jettyEnvXml>${basedir}/src/main/resources/jetty-env.xml</jettyEnvXml> <defaultsDescriptor>${basedir}/src/main/resources/webdefault.xml</defaultsDescriptor> <descriptor>${basedir}/src/main/webapp/WEB-INF/web.xml</descriptor> </webApp> ... </configuration> ... </plugin>
Остался последний шаг — изменение локальных настроек Maven для того, чтобы переменная ${target.directory} имела нужное вам значение, а не значение, указанное в pom-файле.
Отредактируем settings.xml в папке Maven
gksudo -k gedit /usr/share/maven/conf/settings.xml
Создадим новый профиль
<profiles> ... <profile> <id>RAMBuild</id> <properties> <target.directory>/tmp/maven/${project.groupId}.${project.artifactId}/target</target.directory> </properties> </profile> ... </profiles>
Добавим новый профиль в список активных:
<activeProfiles> .... <activeProfile>RAMBuild</activeProfile> .... </activeProfiles>
Вот и все. Надеюсь, теперь ваши билды будут быстрее, а диски долговечнее.
ссылка на оригинал статьи http://habrahabr.ru/post/208432/
Добавить комментарий