这里不允许使用Maven Jetty插件守护进程元素

时间:2016-01-25 15:23:50

标签: java maven intellij-idea jetty maven-jetty-plugin

我正在尝试配置项目的pom.xml文件。我希望它在测试阶段启动Jetty服务器。为了做到这一点,我应该在Jetty插件中添加“守护进程”元素,就像我在下面所做的那样,但是IntelliJ警告我“这里不允许元素守护进程”。你能帮我么?是什么原因?

<build>
    <plugins>
        <plugin>
            <groupId>org.eclipse.jetty</groupId>
            <artifactId>jetty-maven-plugin</artifactId>
            <version>9.2.11.v20150529</version>
            <configuration>
                <httpConnector>
                    <port>8083</port>
                </httpConnector>
            </configuration>
            <executions>
                <execution>
                    <id>start-jetty</id>
                    <phase>pre-integration-test</phase>
                    <goals>
                        <goal>run</goal>
                    </goals>
                    <configuration>
                        <scanIntervalSeconds>0</scanIntervalSeconds>
                        <daemon>true</daemon>
                    </configuration>
                </execution>
                <execution>
                    <id>stop-jetty</id>
                    <phase>post-integration-test</phase>
                    <goals>
                        <goal>stop</goal>
                    </goals>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>

2 个答案:

答案 0 :(得分:11)

它实际上是一个IntelliJ Idea的错误。它有时无法正确识别某些配置属性。该插件确实具有此属性,因此除了忽略IDE中的错误之外,您还没有其他选择。该插件将按预期工作。

答案 1 :(得分:2)

我知道我迟到了四年,但我正在调查同样的问题。

如果您将 Jetty 的依赖项更新为 10.0.0,则错误已解决:daemon 不再产生该错误。

但是,如果您更新到 11.0.0(最新的,在 Maven Central 上),事情会变得很奇怪:

  • daemon 再次开始产生错误,
  • scanIntervalSeconds 也会产生错误,而以前从未发生过。

所以,我做了一些研究。

我怀疑你从 using jetty and maven-failsafe-plugin 拿走了你的代码。

我阅读了一些Jetty 11 Programming Guide,并找到了这一段:

<块引用>

这是一个示例,它每十次打开扫描更改 秒,并将 webapp 上下文路径设置为 /test:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>{VERSION}</version>
  <configuration>
    <scan>10</scan>
    <webApp>
      <contextPath>/test</contextPath>
    </webApp>
  </configuration>
</plugin>

另外,我发现了 this other paragraph

<块引用>

这是使用预集成测试和 post-integration-test Maven 构建阶段以触发执行和 码头的终止:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>{VERSION}</version>
  <configuration>
    <scan>10</scan>
    <stopKey>foo</stopKey>
    <stopPort>9999</stopPort>
  </configuration>
  <executions>
    <execution>
      <id>start-jetty</id>
      <phase>pre-integration-test</phase>
      <goals>
        <goal>start</goal>
      </goals>
      <configuration>
        <scan>0</scan>
      </configuration>
    </execution>
    <execution>
      <id>stop-jetty</id>
      <phase>post-integration-test</phase>
       <goals>
         <goal>stop</goal>
       </goals>
     </execution>
  </executions>
</plugin>

因此,我将 scanIntervalSeconds 替换为 scan。因此,IntelliJ 不再在第一次出现时发出任何错误信号。但是,第二次出现仍然会产生错误。

daemon而言...

Jetty 9 documentation

<块引用>

例如,您可以配置插件以在 单元测试的开始并在结束时停止。为此,您需要 为 Jetty 插件设置几个执行场景。你 使用 pre-integration-test 和 post-integration-test Maven 构建 触发 Jetty 执行和终止的阶段:

<plugin>
  <groupId>org.eclipse.jetty</groupId>
  <artifactId>jetty-maven-plugin</artifactId>
  <version>{VERSION}</version>
  <configuration>
    <scanIntervalSeconds>10</scanIntervalSeconds>
    <stopKey>foo</stopKey>
    <stopPort>9999</stopPort>
  </configuration>
  <executions>
    <execution>
      <id>start-jetty</id>
      <phase>pre-integration-test</phase>
      <goals>
        <goal>start</goal>
      </goals>
      <configuration>
        <scanIntervalSeconds>0</scanIntervalSeconds>
      </configuration>
    </execution>
    <execution>
      <id>stop-jetty</id>
      <phase>post-integration-test</phase>
       <goals>
         <goal>stop</goal>
       </goals>
     </execution>
  </executions>
</plugin>

这里甚至没有提到 daemon。 因此,Failsafe 的文档可能有错误,daemon 并不是真正需要的。

总结:

  • 我不知道为什么 daemon 在 10 上有效而在 11 中不再有效。
  • 似乎甚至没有必要......