06 октября 2010

Maven tips. Опции для многомодульных проектов

Тем из нас кто в качестве билд тулзы использует maven посвящается.
Ежедневно нам приходится десятки раз пересобирать проект. Это занимает от нескольких секунд до минут рабочего времени, которые можно было бы провести более полезно нежели тупо наблюдая за выполнением процедуры билда. В данной заметке рассмотрим пару уловок, позволяющих оптимизировать время на сборку проекта.

1. rf опция.
Большинство больших проектов разбиваются на несколько модулей, при этом запустив сборку родительского проекта запускается сборка всех дочерних. При падении сборки на одном из последних дочерних проектов, исправление ошибки и повторный перезапуск сборки приведёт к сборке всех всех модулей. Специально для таких случаев придумана опция resume(mvn -rf [родительский проект]), которая запустит билд с последнего поломанного проекта, не пересобирая уже собранные.
2. pl опция.
Ещё одна опция упрощающая жизнь, позволяет собирать только указанные проекты. В тех случаях когда нет необходимости собирать весь проект, а нужны только некоторые его модули можно воспользоваться опцией pl:
mvn -pl [модуль1],[модуль2] clean install


UPD.
Эмпирическим путём было установлено что опция pl является транзитивной. Тоесть если ваша структура проекта выглядит следующим образом:
корень
-модуль1
-модуль2
--сын_модуля2
-модуль3
--дочь_модуля3
И если вам необходимо сбилдить модуль1 и дочь_модуля3, то это возможно сделать с помощью следующей команды:
mvn -pl <модуль1>,<модуль3\дочь_модуля3> clean install


по мотивам 5 Maven Tips by Shekhar Gulati

Андрей Аксёнов. Прекращаем писать код.

Видео о BEST PRACTICES в программировании.

05 октября 2010

Apache Commons. Вывод всех "пропертей бина"

Работа программиста полна рутинных задач, которые делают её скучной и не интересной. Одной из таких задач есть переопределение стандартных методов: equals, hashCode, toString и др.
Не знаю как вы, но я метод toString в своих классах использую в основном для логгирования всей возможной информации об экземпляре класса. Так вот, в классах с большим числом пропертей (бинах) зачастую метод toString выглядит ужасно архаично. Кроме того при добавлении новых пропертей зачастую забывается добавить его вывод в toString, что добавляет проблем при будущих исследованиях ошибок. Рассмотрим на примере класса Student.

class Student {

String name;
Integer course;

public String toString() {
return "Имя: " + name + "Курс: " + course==null?"":course.toString();
}
}

Всё просто и примитивно, но не красиво, сложно и не сразу понято.
Специально для решения данных проблем в Apache Commons был создан класс ToStringBuilder, который самостоятельно соберёт строку или несколько строк из всех пропертей вашего класса. В результате использования данного класса наш пример примет следующий вид:

class Student {
String name;
Integer course;

public String toString() {
return ToStringBuilder.reflectionToString(this);
}
}
П.С.: По аналогии с ToStringBuilder в указанной библиотеке есть EqualsBuilder, HashCodeBuilder, CompareToBuilder которые также являются весьма полезными.