Развертывание Java с помощью Ant: помощь с версионированием, тестированием и т. Д. Для улучшения сборки - PullRequest
2 голосов
/ 24 января 2011

В последние месяцы я разработал Java-проект, инструмент для экспериментального анализа из командной строки.Поскольку у меня нет специалиста по CS в фоновом режиме (вместо этого математика / инженерия), я имел удовольствие сражаться и изучать такие понятия, как управление проектами и POM, контроль версий (SVN) и сценарии сборки (ANT).Причина, по которой я описываю это, состоит в том, чтобы изобразить тот факт, что большинство этих концепций не приходят ко мне естественным образом, в отличие от алгоритмов и формул (я думаю, можно сказать, что я научился быть « кодером »)."не" программист", если такое различие является действительным / принятым).

При этом я сумел заставить вещи работать по большей части, однако довольно неполно / уродливо враз.Поскольку я хотел бы учиться и совершенствоваться по пути, я подумал спросить здесь о SO.Файл ANT, который я использую сегодня и который с течением времени создается с некоторой помощью, прилагается ниже.

Учитывая ситуацию, я хотел бы ...:

Вопрос 1: ... добавить контроль версий в некоторой степени, поэтому, когда я поставляю программное обеспечение какJAR-файл для пользователей по всему миру, и они, и я можем отслеживать потенциальные проблемы и разработки.Номер версии, прикрепленный к имени файла JAR (например, prog-0.1.5.jar), наряду с каким-либо выводом пользователю во время выполнения, будет идеальным.Мне сказали, что это возможно через ANT, но мне пока не повезло.Любые советы или предложения?

Я также получил следующий фрагмент кода для этой цели, но я не уверен, почему / как он будет работать в моем проекте, поскольку я не объявил эти атрибуты / свойства ...

<svn>
  <status path="."
          lastChangedRevisionProperty="someproject.build" />
</svn>

РЕДАКТИРОВАТЬ: Просто чтобы прояснить мои длинные вопросы, я хотел бы стандартизировать управление версиями в моем проекте.Возможно, я неправильно использовал этот термин, но сейчас осуществляется контроль версий:

  • Я регулярно выполняю коммиты на сервер SVN для отслеживания изменений (а также для создания резервных копий)
  • Я вручную пытаюсь отслеживать различные версии программного обеспечения

Чтобы привести пример того, чего я хочу достичь в отношении управления версиями:

  1. Я бынравится избегать ручной нумерации версий;это просто так подвержено ошибкам ...
  2. Я хотел бы отслеживать различные сборки, по крайней мере локально, используя их номера версий, так что я всегда имею более старую сборку, если мне понадобитсяисследовать старую сборку.(Теперь я делаю ant dist-clean; ant dist для новых сборок, которые просто перезаписывают старые JAR-файлы)
  3. Было бы предпочтительным, если бы номер версии мог быть включен в сборку, поэтому содержательная строка (например, «Вы сейчас запускаете My_Awesome_software»).v: 0.1.3 ") при запуске JAR
  4. Для достижения вышеупомянутого с SVN в качестве отслеживания версии и ANT в качестве инструмента сборки.Я не уверен, могу ли я изменить отслеживание версий на нашем сервере, и Maven просто не подходит на данном этапе.Кажется, это большая проблема для изучения среднего уровня, чем какие бы то ни было преимущества ...

Вопрос 2: ... изучите юнит-тестирование.Я много читал о модульном тестировании, являющемся святым Граалем современного программирования, и у меня есть некоторые отдаленные воспоминания о JUnit из университета несколько лет назад.Я понимаю, что в идеальной среде разработки программного обеспечения модульное тестирование является абсолютно критическим, однако я понятия не имею, как следует / можно проводить модульные тесты в моем случае;где программное обеспечение имеет минимальный пользовательский интерфейс (файл параметров и несколько необязательных флагов во время выполнения) и длительное (читай: часы) время выполнения в связи с анализом.

Учитывая ситуацию, все еще считается плохой практикой не проводить модульные тесты, если это так, как мне следует рассуждать, когда я структурирую свои тесты?

Мне кажется, что юнит-тесты, как правило, в несколько раз больше и выполняются даже дольше, чем реальное программное обеспечение, если я пытаюсь протестировать большинство функций в программном обеспечении.


выводы: Я изучал эту концепцию нумерации версий с помощью ANT, я кратко обобщу свои выводы для других, кто может столкнуться с тем же вопросом:

  1. Создайте файл свойств как @Kevin Stembridge, упомянутый ниже, например, build.properties. Моя выглядит так:

    micro.version = 5
    build.number = 5
    major.version = 0
    minor.version = 0

  2. Импортировать свойства из этого файла с: <property file="project-version.properties"/>

  3. Согласуйте желаемую схему нумерации с именем банки в теге банки. Смотрите код ниже.

  4. Модульное тестирование необходимо, однако сложно для такого проекта, как мой. Я буду смотреть на это по мере развития проекта.

Спасибо всем, кто как-то помог, я выбираю ответ Кевина как принятый, поскольку он единственный, который оказал непосредственное влияние на мое решение здесь.


<target name="dist" depends="compile,static" description="Compiles and builds jar files">  

  <mkdir dir="${dist}"/>  
  <buildnumber file="project-version.properties"/>  
  <property name="version.number" value="${major.version}.${minor.version}.${micro.version}"/>  
  <svn>  
    <status path="."
            lastChangedRevisionProperty="rev.number" />
   <info target="." />
  </svn>

   <jar basedir="${build}"
       destfile="${dist}/fever-${version.number}-rev${rev.number}.jar"
       includes="**/*" />
</target>

Ответы [ 3 ]

2 голосов
/ 24 января 2011

Чтобы ответить на вопрос 1:

Чтобы добавить номер версии в ваш jar-файл и любые другие артефакты, вы должны создать файл свойств с именем, таким как "project-version.properties". В него добавьте следующую строку:

project.version=<my_version_number>

В файле build.xml добавьте следующий фрагмент:

<property file="project-version.properties" />

Затем вы можете добавить версию к вашему файлу jar следующим образом:

<jar destfile="${dist}/prog-cli-${project.version}.jar">

Чтобы ответить на вопрос 2:

Это большая дискуссия, и я не буду вдаваться в подробности. Конечно, возможно (проще на самом деле) создать хороший набор модульных тестов для кода, который не имеет пользовательского интерфейса. Если вы знаете, какой результат вы ожидаете получить для данного входа, вы можете написать тест, который подтверждает это.

Чтобы ответить на вопрос 3:

Ваш файл сборки выглядит нормально. Я не вижу проблем с этим.

Относительно предложения использовать Maven. Он решит вашу проблему с версиями для вас, используя соглашения, но помните, что кривая обучения - не единственный недостаток. Переходя на Maven, вы жертвуете гибкостью, простотой и надежностью.

2 голосов
/ 24 января 2011

1

В ту минуту, когда у вас есть более одной версии, вам требуется контроль версий!

Если у вас ее нет, вы окажетесь "ах, источник версии 4.5.1.2 находится в этом zip-файле ", и он очень быстро становится очень утомительным.

Когда вы выбираете между системами контроля версий, выберите такую, которая легко позволит вам:

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

Это обычно доступно сегодня.Расселись не меньше.Мне лично нравятся git и github, но другие любят mercurial и bzr.

2

Не забывайте причину для тестирования.Вам нужно сказать, когда что-то сломается, и как можно скорее!Часто это означает, что вы добавляете сценарий, который ранее нарушался и был исправлен, а затем смотрите, не нарушится ли он в этот раз.Вы часто делаете это на сервере сборки, который выполняет быстрые тесты каждый раз, когда вы регистрируетесь в своей версии системы, и долгие тесты в нерабочее время.

3

Я не знаю, следует ли вамВнесите изменения в ваш файл ant, но я бы рекомендовал вам использовать подход, при котором файл сборки ant и конфигурация IDE могут быть несколько синхронизированы.Я использовал ant4eclipse для написания системы сборки с использованием конфигураций Eclipse.Это стало довольно грубым, и я бы предложил использовать IDE, которая явно знает о муравье.Я не думаю, что это хорошо работает в Eclipse.

2 голосов
/ 24 января 2011

Я понимаю, что вы сосредоточены на Ant как на инструменте сборки. Тем не менее, я бы посоветовал вам рассмотреть Maven.

Некоторые из проблем, которые вы описываете, связаны с тем, почему существует Maven. Идея модульного тестирования перед созданием файла JAR, идея построения номеров версий, идея ветвления и маркировки версии в вашем хранилище исходного кода (даже SVN) встроены прямо в Maven.

Недостатком является то, что это еще один инструмент для изучения, и кривая обучения может быть крутой.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...