?

Log in

No account? Create an account
nyaload

Журнал Пушыстого

Журнал Пушыстого

Previous Entry Share Next Entry
Детей без родителей надо убивать.
nyaload
_winnie
Какие системы сборки умеют корректно удалять результирующие файлы, для которых уже нет источников? Без clean && rebuild-all, а оставляя билд инкрементальным.

maven явно пишет в документации, что не умеет корректно определять что jar надо перепаковать, и поэтому пакует всегда. Наверное, потому что на Java так сложно сравнить равны ли два списка, и потому что сборку java->class перепоручает javac который не умеет удалять .class для которых нет исходников. Зачем тогда называться сборщиком, если перепоручаешь сборку другому посредственному сборщику, у которого прямая обязанность - компиляция, а не инкрементальная сборка.

Когда я писал кастомный сборщик атласа из тыщи картинок, то он во-первых проверял чексумы, а не даты. Во-вторых, я сохранял список файлов из которых получился результат, и пересобирал если множество исходных файлов изменилось. В третьих, я удалял все файлы, которые не могут появиться после билда.

Если "make" != "make clean; make", то от такого make у меня батхёрт.

maven-archiver: Checking for timestamps will offer a performance gain on the cost that you get inaccurate results from time to time. In particular, removal of source files won't be detected.


  • 1
(Deleted comment)
А ты не в курсе случайно, как удалить строчки с именем пользователя и версией jdk из манифеста? jdk ещё понятно что может быть полезно, хоть и мешает бинарному сравнению, но вот имя пользователя класть в билд... это ж кем надо быть что бы догадаться...


Manifest-Version: 1.0
Archiver-Version: Plexus Archiver
Created-By: Apache Maven
Built-By: ${user.name}
Build-Jdk: ${java.version}



Edited at 2010-11-18 06:32 pm (UTC)

(Deleted comment)
Спасибо! Попробую в понедельник. Я обчитал всю документацию, что бы найти где удалить эти атрибуты, но не догаладся перезаписать их.

> Если "make" != "make clean; make", то от такого make у меня батхёрт.
Если make clean = "грохнуть нахрен папку build" (это, кстати, единственно правильный make clean imo), то для такого нужно чтобы билд система чистила старые артефакты - я из таких знаю только tup, но это кот в мешке.

Если make clean = "удалить текущие таргеты", то нужны "всего лишь" корректные зависимости. Это не так просто, как хочется, к сожалению.

kjam сцуко по-умолчанию удаляет файл для которого нет исходника, есть даже спец модификатор для action'а "precious" чтобы он так не делал.

Ммм, ты точно уверен, что это про то?

По крайней мере в jamplus и в scons "precious" == "не удалять таргет до сборки/при неудачной сборке".

У меня впрочем версия последняя kjam-овская не умела precious и не запускается, а новую брать неоткуда, т.к. он похоже умер.

да, не совсем оно -- я боролся с другой ситуцией (акшн бесусловно обновлял файл и не нужно было его удалять в случае фейла)

// kjam не умер, его просто стали продавать за деньги
// ну или как договоришься

Мыши/кактус ОК.

Когда у нас использовался makefile, сначала строился файл который содержал имена всех ресурсов, которые должны быть в билде, потом список всех ресурсов которые есть в билде, то чего не хватало добилживалось, лишнее удалялось...
использовались команды wildcard и filter-out

(Deleted comment)
Спасибо, кэп. Компонентов уже 200 штук.

ну вот scons умеет считать чексумы (и делает это по-умолчанию), а не смотрит даты, думаешь от этого легче? сам ведь недавно жаловался, что проверка нетронутости билда занимает уйму времени, с чексумами эта уйма будет ещё уймистее

прочел заголовок. подумал. еще раз перечитал заголовок. несколько раз вспомнил, что ты программист и детей не имеешь(вроде бы). перечитал еще раз. Открыл пост, прочитал все комментарии. успокоился. написал этот комментарий :)

я тебе больше скажу, что вместо maven clean я всегда делаю rm -rf. быстрее на много порядков :)

Edited at 2010-12-21 08:25 pm (UTC)

  • 1