나는 maven-jetty-plugin
을 사용하여 Jetty 9.0.4v20130625를 실행 중입니다. 나는 자신의 LoginService
클래스를 구현하여 사용자가 영역에 로그인하는 것을 처리합니다. 줄 중 하나에서 org.eclipse.jetty.util.security.Credential
클래스를 사용하려고 시도하지만 실행 중에 해당 줄에 NoClassDefFoundError
이 발생합니다.Maven Jetty Plugin이 표준 부티크 병에서 클래스를 찾지 못하는 이유
내 target
디렉토리에는 Jetty 인스턴스에 배포되는 모든 것이 포함되어 있습니다. 그 안에 WEB-INF/lib
폴더에는 jetty-util-9.0.4.v20130625.jar
이 예상대로 포함되어 있지 않으므로 플러그인에 이미이 파일이 있어야하므로 충돌하는 jar 파일을 제외한다고 생각합니다. 부두가이 항아리를 찾지 못하게하는 원인은 무엇일까요?
이클립스를 사용하고 있으며 코드에 오류가 표시되지 않습니다. Maven 프로젝트로 설정하고 Maven이 의존성을 처리합니다. 나는 부두가 배치 될 때 부두에 의해 제공되어야하므로 부두 단지를 포장하지 않도록 설정했습니다. 여기 내 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>
나는 플러그인이 부두-util.jar에 따라 확실하게 확인
과 문제의 일부가 될 수 here
뭔가 바와 같이 수행합니다 구현하는 방법을 새로운 LoginService
인터페이스 클래스인데, 이미 LoginService
을 구현하고있는 MappedLoginService
클래스를 확장하려고합니다. (이것은 Jetty jars에 있습니다.) 메소드 중 일부를 재정의하고 있습니다. 그것이 문제의 원인이 될 수 있습니까?
답 해 주셔서 감사합니다 .1 월. 그럴 수도 있다고 생각했습니다. jetty-util.jar에 의존성 추가 제안 사항 - 제 lib 폴더 안에 jetty-util.jar을 넣으면 로더 제약 조건 위반이 발생합니다. 오류는 org.codehaus.plexus.classworlds.realm.ClassRealm 클래스 로더와 ... jetty.webapp.WebAppClassLoader가 ... jetty.util.security.Credential 유형에 대해 다른 오브젝트를 가지고 있다고합니다. 나는 Credential 클래스와 내가 다른 프로젝트에 속한 다른 부두 종속성을 수동으로 가져와야한다고 생각하니? 그 맞습니까? – bzuillsmith
플러그인 구성 정보 : 당신 말이 맞습니다. 로그인 구성은 불필요합니다. 어딘가에 다른 예제에 포함 된 것을 보았지만 web.xml에는 login-config도 포함되어있어 잘 작동합니다. 또한 올바르게 구성되었다는 것을 알고 있기 때문에 여기에 사용자 정의 loginService에 대한 구성을 두는 것을 원하지 않았습니다. 클래스가 코드를 실행해야하지만 자격 증명에 실패하면 코드를 실행합니다. lib에 jetty-util.jar를 포함하면 LinkageError가 마지막 주석에 설명되어 있습니다. – bzuillsmith
마치 전쟁 중에 사용자 정의 LoginService가있는 것처럼 들립니다. LoginService는 컨테이너의 아티팩트의 일부이기 때문에 나는 그것이 비행 할 것이라고 생각하지 않습니다. 커스텀 LoginService를위한 별도의 프로젝트를 작성한 다음, jar를 jetty-maven-plugin 의존성에 추가하는 것이 좋습니다. 모든 것이 컨테이너의 classpath에 있습니다. – Jan