Maven - POM:如何使码头端口可变,以便以后可以检索?

Posted

技术标签:

【中文标题】Maven - POM:如何使码头端口可变,以便以后可以检索?【英文标题】:Maven - POM: How to make the jetty port changeable so that it can be retrieved later? 【发布时间】:2011-03-21 01:15:23 【问题描述】:

我正在开发一个集成测试套件,我有一个问题要问你。

我的父 pom 定义了 jetty 插件的使用,其目标是:run-war。我需要通过命令行更改码头监听的端口。例如,这可以通过传递 -Djetty.port=8099 来实现。

在子项目中,我需要使用此端口号为一些 SOAP 测试配置端点,这些测试需要在 jetty 托管的服务上运行。

如果我在端点配置中的子 pom 中使用 $jetty.port,如果我在调用 maven 时明确传递 -Djetty.port,则此方法可以正常工作。

在我的孩子 pom 中:


<endpoint>http://127.0.0.1:$jetty.port/artifactId<endpoint>

我需要在 jetty.port 中填写 8080,如果 -Djetty.port 未显式传递,这是 jetty 默认的值,并且如果指定了命令行参数,仍会捕获任何其他端口值。

【问题讨论】:

【参考方案1】:

使用属性部分,并添加一个带有默认值的 jetty.port 属性:

<properties>
  <jetty.port>8080</jetty.port>
</properties>

【讨论】:

谢谢。这并不太难 :-) 一旦计时器用完,我就会接受这篇文章作为答案。 是的 - 它对我也不起作用。我可以在命令行中执行 -Djetty.port=8080,但是将 放在 pom 中不起作用。 你也可以这样做:导出 MAVEN_OPTS="-Djetty.port=9999" 这个环境。变量消除了对命令行选项的需要。 非常有用的答案,特别是因为文档目前对此不正确,并且错误地说该属性应该是jetty.http.port,它不再有效。 到目前为止,只有 export MAVEN_OPTS="-Djetty.port=9999" 对我有用【参考方案2】:

配置 maven 码头插件:

    <plugins>

        <plugin>
            <groupId>org.mortbay.jetty</groupId>
            <artifactId>maven-jetty-plugin</artifactId>
            <version>6.1H.14.1</version>
            <configuration>
                <connectors>
                    <connector implementation="org.mortbay.jetty.nio.SelectChannelConnector">
                        <port>8085</port>
                        <maxIdleTime>60000</maxIdleTime>
                    </connector>
                </connectors>
             </configuration>
        </plugin>
    </plugins>

如果要使用较新版本的 jetty 插件,请使用以下配置: 来自http://www.eclipse.org/jetty/documentation/current/jetty-maven-plugin.html

您可以改为在标准 jetty xml 配置文件中配置连接器,并将其位置放入 jettyXml 参数中。请注意,从 jetty-9.0 开始,不再可以直接在 pom.xml 中配置 https 连接器:您需要使用 jetty xml 配置文件来执行此操作。 比如:

    <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.0.5.v20130815</version>
        <configuration>
            <jettyXml>src/main/resources/jetty.xml</jettyXml>
            <webApp>
                <contextPath>/yourCtxPath</contextPath>
            </webApp>
        </configuration>
    </plugin>

会做的伎俩,与 jetty.xml 文件内容:


<?xml version="1.0"?>
<!DOCTYPE Configure PUBLIC "-//Jetty//Configure//EN" "http://www.eclipse.org/jetty/configure.dtd">

<Configure id="Server" class="org.eclipse.jetty.server.Server">
  <Call id="httpsConnector" name="addConnector">
    <Arg>
      <New class="org.eclipse.jetty.server.ServerConnector">
        <Arg name="server"><Ref refid="Server" /></Arg>
          <Set name="host"><Property name="jetty.host" /></Set>
          <Set name="port"><Property name="jetty.port" default="8085" /></Set>
          <Set name="idleTimeout">30000</Set>
        </New>
    </Arg>
  </Call>

</Configure>

查看 'mvn jetty:run' 之后的日志,最后应该显示如下内容: 2013-09-05 09:49:05.047:INFO:oejs.ServerConnector:main: 已启动 ServerConnector@a6e9cb4HTTP/1.10.0.0.0:8085

此版本的插件需要使用 maven 3 和 java 7。

【讨论】:

以上是关于Maven - POM:如何使码头端口可变,以便以后可以检索?的主要内容,如果未能解决你的问题,请参考以下文章

如何检查 pom.xml 以获取更新的依赖项

使用 jetty-maven-plugin 运行 Jetty,并在 jetty 运行时完成构建

如何使用 pom.xml 将参数传递给 Maven 构建? [复制]

如何迁移基于 Maven 的 Web 应用程序 POM 以使用 Gradle?

码头工人。从主机发送邮件

如何使用同一端口(使用码头 8)拥有具有多个上下文的 websocket