1

私はJetty 9.0.4v20130625を使用しており、maven-jetty-plugin. LoginServiceレルムにログインしているユーザーを処理する独自のクラスを実装しました。行の 1 つでクラスを使用しようとしましたorg.eclipse.jetty.util.security.Credentialが、実行中にその行に a がスローNoClassDefFoundErrorされます。

私のtargetディレクトリには、Jetty インスタンスにデプロイされているすべてのものが含まれています。その中には、プラグインに既に含まれている必要があるため、WEB-INF/libフォルダーには期待どおりが含まれていないjetty-util-9.0.4.v20130625.jarため、競合するjarを除外すると思います。では、jetty インスタンスがこの jar を見つけられない原因は何でしょうか?

私は日食を使用していますが、コードにエラーは表示されません。これを Maven プロジェクトとして設定すると、Maven が依存関係を処理します。デプロイ時に Jetty によって提供される必要があるため、Jetty jar をパッケージ化しないように設定しました。ここに私のpom.xmlがあります:

<project ...>
  ...
  <packaging>war</packaging>
  ...
  <dependencies>
    <dependency>
      <groupId>junit</groupId>
      <artifactId>junit</artifactId>
      <version>3.8.1</version>
      <scope>test</scope>
    </dependency>
    <dependency>
      <groupId>org.eclipse.jetty</groupId>
      <artifactId>jetty-webapp</artifactId>
      <version>9.0.4.v20130625</version>
      <scope>provided</scope>
    </dependency>
    <dependency>
      <groupId>org.mongodb</groupId>
      <artifactId>mongo-java-driver</artifactId>
      <version>2.11.2</version>
    </dependency>

  </dependencies>
  <build>
    <finalName>...</finalName>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-compiler-plugin</artifactId>
        <version>3.1</version>
        <configuration>
          <source>1.7</source>
          <target>1.7</target>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.eclipse.jetty</groupId>
        <artifactId>jetty-maven-plugin</artifactId>
        <version>9.0.4.v20130625</version>
        <configuration>
          <scanIntervalSeconds>10</scanIntervalSeconds>
          <webApp>
            <contextPath>/...</contextPath>
          </webApp>
          <login-config>
            <auth-method>FORM</auth-method>
            <realm-name>Test Realm</realm-name>
            <form-login-config>
              <form-login-page>/loginAuth.html?param=redirect</form-login-page>
              <form-error-page>/loginAuth.html?param=failed</form-error-page>
            </form-login-config>
          </login-config>
        </configuration>
      </plugin>

      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-scm-plugin</artifactId>
        <version>1.8.1</version>
        <configuration>
          <connectionType>developerConnection</connectionType>
        </configuration>
      </plugin>

      <plugin>
        <artifactId>maven-antrun-plugin</artifactId>
        <version>1.7</version>
        <executions>
          <execution>
            <phase>install</phase>
            <configuration>
              <tasks>
                <ant target="deploy" />
              </tasks>
            </configuration>
            <goals>
              <goal>run</goal>
            </goals>
          </execution>
        </executions>
        <dependencies>
          <dependency>
            <groupId>com.jcraft</groupId>
            <artifactId>jsch</artifactId>
            <version>0.1.50</version>
          </dependency>
          <dependency>
            <groupId>org.apache.ant</groupId>
            <artifactId>ant-jsch</artifactId>
            <version>1.9.2</version>
          </dependency>
        </dependencies>
      </plugin>
    </plugins>
  </build>
</project>

プラグインが jetty-util.jar に依存していることを確認したところ、ここに示すように動作します

問題の一部である可能性があるもの: 新しいLoginServiceインターフェイス クラスを実装するために、MappedLoginService既に実装されているクラスLoginService(Jetty jar 内) を拡張し、そのメソッドの一部をオーバーライドしています。それが問題を引き起こしている可能性はありますか?

4

1 に答える 1

1

Jetty は、その実装クラスのほとんどすべてを Web アプリケーションのクラスローダーから隠します。Web アプリ内からそれらにアクセスする必要がある場合は、それらを Web アプリの WEB-INF/lib に配置する必要があります (この場合、jetty-util jar の依存関係を追加します)。

このクラスローディング メカニズムについては、http ://www.eclipse.org/jetty/documentation/current/jetty-classloading.html で説明しています。

ところで、pom.xml からの jetty-maven-plugin の構成には、web.xml からの行 (つまり、要素内の行) が含まれているようです。Mavenは理解できない構成を無視すると思いますが、おそらくあなたが思っているように構成されていませんか? また、カスタム LoginService を使用するための設定もありません。

于 2013-08-01T00:14:58.307 に答える