Использование Hudson и Maven для выпуска приложения для нескольких платформ - PullRequest
2 голосов
/ 07 января 2011

Этот вопрос на самом деле не о лучших практиках или архитектуре, а о том, как конкретно настроить Хадсона и Мейвена для достижения того, чего я хочу. Я немного растерялся.

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

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

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

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

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

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

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

Ответы [ 3 ]

1 голос
/ 10 января 2011

У вас есть синтаксическая ошибка.Это должно быть -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 голосов
/ 11 января 2011

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

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

0 голосов
/ 08 января 2011

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

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

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

...