6

我正在从 Maven 的 jetty 插件迁移到 Cargo 插件(cargo-maven2-plugin),因为 Cargo 会很乐意从依赖的 Maven 模块运行 WAR。在 Web 应用程序内部,我们煞费苦心地通过 JNDI 将所有配置外部化。这些 JNDI 定义是特定于 Web 应用程序的,因此放置在 WAR 外部的 jetty-env.xml 文件中。使用 Jetty 插件,我们指定这个文件如下:

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

如何在 Cargo 插件中指定这一点?这是我到目前为止的配置。当然,由于缺少 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

4 回答 4

3

根据CARGO-804,Cargo 的 Jetty 部署程序现在支持在您的战争中嵌入 jetty-env.xml(从 1.0.3 版开始)。

为了让jetty-env.xml你的“真实”战争保持在外部,我的建议是创建一个额外的战争模块来托管jetty-env.xml文件并配置 Cargo 以合并 WAR 文件(特别注意<extensions>true</extensions>重要的元素,如CARGO中所述-524 )。

于 2010-10-28T05:00:23.227 回答
1

我有同样的问题,并希望进行全新安装。我并没有被 WAR 文件的合并所吸引。相反,我使用程序集来维护所有外部属性的 ZIP 文件。作为一个单独的模块,我可以将 ZIP 文件的内容部署到 JETTY 环境中。反过来,我利用 Jetty 如何使用 Web 应用程序的名称来加载免费的环境文件(对于 webapps/foo.war,Jetty 使用 contexts/foo.xml 进行配置)。因此,虽然它不像纯 Cargo 解决方案那样紧凑,但我更喜欢它,因为 WAR 文件在整个促销过程中的进度是纯正的。该解决方案也是管理所有配置活动的通用机制。如果有人感兴趣,我可以指出更多细节。

于 2010-12-06T23:31:35.080 回答
1

Mond 的回答引发了一个想法,也许我可以使用 Cargo 的配置将我的(重命名并稍作修改)jetty-env.xml 存放到“contexts”目录中。令我惊讶的是,它刚刚奏效。这是我所做的:

在我的货物配置中,我添加了以下内容:

<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 在复制我的之后会转储自己的上下文文件,但它足够聪明,最后复制了我的。

于 2010-12-11T04:42:47.550 回答
1

我想做的另一件事是过滤属性。到目前为止,我有这个:

    <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(我猜 Hudson 类似),并且可以根据环境调整计划。计划可能受到访问控制。这使我们可以在一个地方设置所有部署属性,因此不再有管理员在 Unix 机器上进行黑客攻击。

于 2010-12-13T23:36:22.623 回答