2011-01-07 4 views
2

Этот вопрос не совсем о лучших методах или архитектуре, а о том, как конкретно настроить Hudson и Maven для выполнения того, что я хочу. Я немного потерян.Использование Hudson и Maven для выпуска приложения для нескольких платформ

У меня есть приложение Java, которое использует SWT, и мне нужно создавать копии для разных платформ. На данный момент мне нужны только Linux i386 и Linux amd64, но в будущем мне также нужно добавить Windows x86/x64, поэтому я хочу убедиться, что в первый раз я настроил его правильно.

Мое приложение имеет все зависимости и другую информацию, перечисленные в Project pom.xml, включая различные банки SWT для захвата в зависимости от ОС, арки и семейства.

Мой вопрос в том, как мне строить сборки для Linux i386 и linux amd64 с минимальным дублированием конфигурации? Сейчас я делаю следующее:

  • Проект определяет всю зависимость в pom.xml, и этот проект установлен построить в Гудзон и развернуть в результате .jar для Nexus
  • Builder-Linux-i386 прогонов после проекта и указывает любые файлы JNI для i386 и использует de.tarent maven-pkg-plugin, чтобы захватить проектную банку из Nexus и собрать ее вместе со всеми зависимостями в один файл «fat» jar, а затем в файл .deb для установки.
  • Builder-Linux-amd64 делает то же самое, но для amd64 файлов

Я пытался определить, какие зависимостей для использования в Builder проектов путем добавления -P profilename к их Hudson проектов, где profilename является профиль с именем в проекте pom. Maven, похоже, не нравится, и печатает, что он не активирует этот профиль. Он использует только профиль по умолчанию из pom проекта.

Каков правильный способ установить это? Я хочу иметь все мои зависимости, указанные в моем проекте pom, и иметь проект Hudson, который компилирует банку для этого проекта и развертывает его в Nexus, а затем независимых проектов, которые захватывают эту банку и собирают ее вместе с платформой файлы для выпуска. Я не хочу многократно создавать весь оригинальный проект, и я не хочу иметь тонну дублированной информации о конфигурации или скопированных копий.

У меня есть работа для unix-amd64 только потому, что это то, что строительная машина, поэтому Maven нацеливается на эту архитектуру. Кроме того, я чувствую, что настройка не такая чистая, как может быть. Совет?

ответ

0

Проекты-строители не видят профили из основного проекта, потому что на самом деле это не родитель. Я не могу определить его как проект в проектах-конструкторах, потому что мои проекты не настроены таким образом, и я строю с использованием таких переменных, как $ {SVN_REVISION}, которые maven не нравится.

Я отказался и вместо этого скопировал профили в проекты «строитель». Это не самый красивый, но на данный момент он работает.

0

Профили должны работать так, как вы его описали (вы можете отправить другой вопрос об этом).

Но по крайней мере для веб-приложений существует другой способ: попробуйте использовать классификатор вместо профилей для создания в разных средах. - Вы можете посмотреть в этом блоге: http://blog.jayway.com/2010/01/21/one-artifact-with-multiple-configurations-in-maven/

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

1

У вас есть синтаксическая ошибка. Это должно быть -Pprofilename. Это работает для меня таким образом.

Редактировать

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

<profile> 
     <id>junit</id> 
     <build> 
      <plugins> 
       <plugin> 
        <groupId>org.apache.maven.plugins</groupId> 
        <artifactId>maven-surefire-plugin</artifactId> 

        <configuration> 
         <skip>false</skip> 
         <testNGArtifactName>none:none</testNGArtifactName> 
        </configuration> 
       </plugin> 
      </plugins> 
     </build> 

     <dependencies> 
      <dependency> 
       <groupId>junit</groupId> 
       <artifactId>junit</artifactId> 
       <version>4.4</version> 
       <scope>test</scope> 
      </dependency> 
     </dependencies> 

    </profile> 
+0

Это не имеет значения. Maven замечает флаг -P просто отлично и печатает, что он не активирует профиль. – gdm

+0

В чем причина его не активирования? –

+0

Попробуйте снова запустить сборку с помощью -e -X. Это приведет к увеличению производительности. –

Смежные вопросы