Как указать файл jetty-env.xml для плагина Maven Cargo для Jetty? - PullRequest
6 голосов
/ 28 октября 2010

Я мигрирую с подключаемого модуля Maven на подключаемый модуль Cargo (cargo-maven2-plugin), потому что Cargo с радостью будет запускать WAR из зависимых модулей Maven.В нашем веб-приложении мы приложили большие усилия, чтобы вывести всю конфигурацию через JNDI.Эти определения JNDI относятся к конкретному веб-приложению и поэтому помещаются в файл jetty-env.xml, который находится за пределами WAR.Используя плагин Jetty, мы указали этот файл следующим образом:

        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <configuration>
                <jettyEnvXml>${basedir}/target/config/jetty-env.xml</jettyEnvXml>
            </configuration>
        </plugin>

Как можно указать это в Cargo Plugin?Вот конфигурация, которую я имею до сих пор.Это, конечно, сбой из-за отсутствия конфигурации JNDI:

        <plugin>
                <groupId>org.codehaus.cargo</groupId>
                <artifactId>cargo-maven2-plugin</artifactId>
                <configuration>
                    <container>
                        <containerId>jetty6x</containerId>
                        <type>embedded</type>
                    </container>
                    <configuration>
                        <deployables>
                            <deployable>
                                <groupId>com.mycompany</groupId>
                                <artifactId>my-war-module</artifactId>
                                <type>war</type>
                                <properties>
                                   <context>/</context>
                                </properties>
                            </deployable>
                        </deployables>
                    </configuration>
                    <wait>false</wait>
                </configuration>
                <executions>
                           ......
                </executions>
        </plugin>

Ответы [ 4 ]

3 голосов
/ 28 октября 2010

Согласно CARGO-804 , развертыватель Cargo Jet теперь поддерживает встраивание файла jetty-env.xml в вашу войну (по состоянию на версию 1.0.3).

И чтобы не допустить jetty-env.xml вне вашей «настоящей» войны, я бы предложил создать дополнительный военный модуль для размещения файла jetty-env.xml и настроить Cargo на объединить файлы WAR (заплатитьособое внимание к элементу <extensions>true</extensions>, который важен, как упомянуто в CARGO-524 ).

1 голос
/ 14 декабря 2010

Что-то еще, что я хочу сделать, это отфильтровать свойства. Пока у меня есть это:

    <profile>
        <id>deploy-properties</id>
        <activation>
            <activeByDefault>false</activeByDefault>
        </activation>
        <properties>
            <deployable.classifier>properties</deployable.classifier>
            <deployable.type>zip</deployable.type>
            <ys.imq.user>UserFromDeploymentPom</ys.imq.user>
            <ys.imq.password>PasswordFromDeploymentPom</ys.imq.password>
        </properties>
        <dependencies>
            <dependency>
                <groupId>${project.groupId}</groupId>
                <artifactId>${deployable.artifactId}</artifactId>
                <classifier>${deployable.classifier}</classifier>
                <type>${deployable.type}</type>
                <version>${project.version}</version>
            </dependency>
        </dependencies>
        <build>
            <plugins>
                <plugin>
                    <artifactId>maven-dependency-plugin</artifactId>
                    <executions>
                        <execution>
                            <phase>process-resources</phase>
                            <goals>
                                <goal>unpack</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <artifactItems>
                            <artifactItem>
                                <groupId>${project.groupId}</groupId>
                                <artifactId>${deployable.artifactId}</artifactId>
                                <classifier>${deployable.classifier}</classifier>
                                <version>${project.version}</version>
                                <type>${deployable.type}</type>
                                <overWrite>true</overWrite>
                                <outputDirectory>/tmp/${deployable.artifactId}</outputDirectory>
                            </artifactItem>
                        </artifactItems>
                    </configuration>
                </plugin>
                <plugin>
                    <artifactId>maven-resources-plugin</artifactId>
                    <version>2.4.3</version>
                    <executions>
                        <execution>
                            <id>copy-resources</id>
                            <phase>package</phase>
                            <goals>
                                <goal>copy-resources</goal>
                            </goals>
                            <configuration>
                                <outputDirectory>${deploy.jettyHome}</outputDirectory>
                                <overwrite>true</overwrite>
                                <resources>
                                    <resource>
                                        <directory>/tmp/${deployable.artifactId}</directory>
                                        <filtering>true</filtering>
                                    </resource>
                                </resources>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>
    </profile>

Это немного сложнее, чем мне нравится, но позволяет мне фильтровать свойства, добавляя их в Jetty. Это позволяет переопределять пароли и другие конфиденциальные данные с помощью системных свойств. Мы используем Bamboo (я думаю, что Хадсон похож), и можно корректировать планы для каждой среды. Планы могут быть предметом контроля доступа. Это позволяет нам иметь одно место для установки всех свойств развертывания, поэтому администраторы больше не будут взламывать блоки Unix.

1 голос
/ 11 декабря 2010

Ответ Монд породил идею о том, что, возможно, я мог бы использовать конфигурацию Cargo, чтобы поместить мой (переименованный и слегка измененный) файл jetty-env.xml в каталог «contextx».К моему изумлению, это просто сработало.Вот что я сделал:

К своей конфигурации груза я добавил следующее:

<configfiles>  
  <configfile>  
      <file>${basedir}/../config/jetty-env.xml</file>
    <todir>contexts</todir>
     <tofile>${jetty6.context}.xml</tofile>
   </configfile>
</configfiles>

Но чтобы превратить мой jetty-env.xml в реальный context.xml, я добавил следующее:

<!-- Activates the Jetty-Plus feature so we can create/share JNDI resources -->
<Array id="plusConfig" type="java.lang.String">
    <Item>org.mortbay.jetty.webapp.WebInfConfiguration</Item>
    <Item>org.mortbay.jetty.plus.webapp.EnvConfiguration</Item>
    <Item>org.mortbay.jetty.plus.webapp.Configuration</Item>
    <Item>org.mortbay.jetty.webapp.JettyWebXmlConfiguration</Item>
    <Item>org.mortbay.jetty.webapp.TagLibConfiguration</Item>
</Array>

<!-- Miscellaneous properties that were take from the CARGO version of this file that is created automatically
    (and then replaced by this file). If you ever upgrade Cargo you may need to change these. -->
<Set name="contextPath">/${jetty6.context}</Set>
<Set name="war">
    <SystemProperty name="config.home" default="."/>/webapps/${jetty6.context}.war</Set>
<Set name="extractWAR">true</Set>
<Set name="defaultsDescriptor">
    <SystemProperty name="config.home" default="."/>/etc/webdefault.xml</Set>
<Set name="ConfigurationClasses">
    <Ref id="plusConfig" />
</Set>

Я беспокоился, что CARGO сбросит свой собственный файл контекста ПОСЛЕ того, как скопировал туда мой, но он был достаточно умен, чтобы копировать мой в последний раз.

1 голос
/ 07 декабря 2010

Я разделяю ту же проблему и желаю иметь чистую установку.Меня не привлекло слияние файлов WAR.Вместо этого я использую сборку для поддержки ZIP-файла со всеми внешними свойствами.В качестве отдельного модуля я могу развернуть содержимое ZIP-файла в среде JETTY.В свою очередь, я использую, как Jetty использует имя веб-приложения для загрузки файла бесплатной среды (для webapps / foo.war Jetty использует contexts / foo.xml для конфигурации).Так что, хотя он не такой компактный, как решение для чистого груза, я предпочитаю его, поскольку файл WAR не подвергается изменению в процессе продвижения.Решение также является общим механизмом управления всеми действиями по настройке.Я могу указать на более подробную информацию, если кто-то заинтересован.

...