- iOS/Objective-C 元类和类别
- objective-c - -1001 错误,当 NSURLSession 通过 httpproxy 和/etc/hosts
- java - 使用网络类获取 url 地址
- ios - 推送通知中不播放声音
我关注了these steps on JetBrain's site创建 Web 应用程序并让 GlassFish 在本地运行。它运行良好,我可以将代码的输出嵌入到 JSP 项目的 src 树中,并在 Web 浏览器中查看它。当我添加 Maven 依赖项时,问题就开始了。我加了
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>oauth2-oidc-sdk</artifactId>
<version>4.9</version>
</dependency>
到我的 pom.xml 并在我的代码中使用依赖项。 Maven 安装依赖项,一切正常,但是当我单击绿色箭头在 GlassFish 中运行它时,当浏览器打开时出现此错误:
org.apache.jasper.JasperException: PWC6033: Error in Javac compilation for JSP
PWC6199: Generated servlet error: source value 1.5 is obsolete and will be removed in a future release
PWC6199: Generated servlet error: target value 1.5 is obsolete and will be removed in a future release
PWC6199: Generated servlet error: To suppress warnings about obsolete options, use -Xlint:-options.
PWC6197: An error occurred at line: 8 in the jsp file: /index.jsp PWC6199: Generated servlet error: cannot access com.nimbusds.oauth2.sdk.SerializeException class file for com.nimbusds.oauth2.sdk.SerializeException not found
这是 index.jsp 的源代码:
<%@ page import="com.idsrvjpoc.IdentityServerConfiguration" %>
<%@ page contentType="text/html;charset=UTF-8" language="java" %>
<html>
<head>
<title>Redirect</title>
</head>
<body>
<% String redirectUrl = new IdentityServerConfiguration().getRedirectUrl(); %>
<a href="<%=redirectUrl%>"><%=redirectUrl%></a>
</body>
</html>
在我的模块的 Java 编译器设置中,目标字节码版本设置为 1.8,我使用的是最新版本的 1.8 JDK。
我发现了另一个建议将依赖项的 JAR 文件复制到 glassfish4\glassfish\domains\domain1\lib 文件夹的 SO 答案,所以我尝试了它并更改了错误:
java.lang.NoClassDefFoundError: com/nimbusds/oauth2/sdk/id/ClientID
不再有过时的目标值或找不到类文件,而是一个 NoClassDefFoundError。现在是不同的类(class)了。 SerializeException 和 ClientID 都在同一个 JAR 中,我可以提取 JAR 并在我认为正确的位置查看两个 .class 文件。
这是 IdentityServerConfiguration.java 的源代码:
package com.idsrvjpoc;
import com.nimbusds.oauth2.sdk.*;
import com.nimbusds.oauth2.sdk.id.*;
import java.net.URI;
import java.net.URISyntaxException;
public class IdentityServerConfiguration {
public String getRedirectUrl() throws URISyntaxException, SerializeException {
URI authzEndpoint = new URI("myAuthEndpoint");
ClientID clientID = new ClientID("1234");
Scope scope = new Scope("openid");
URI callback = new URI("http://localhost:8080/IdentityServerPoc_war_exploded/return.jsp");
State state = new State();
AuthorizationRequest request = new AuthorizationRequest.Builder(
new ResponseType(ResponseType.Value.CODE), clientID).
scope(scope).
state(state).
redirectionURI(callback).
endpointURI(authzEndpoint).
build();
return request.toURI().toString();
}
}
我错过了什么?
E:我只是尝试从 GlassFish lib 文件夹中删除 JAR 并编辑 war Artifact ,在“输出布局”选项卡上,我将这些 jar 从可用元素移动到 WEB-INF/lib 目录,我看到它们被复制了在那里,当我建立,但仍然是同样的错误。
我还尝试让 Artifact 将 JAR 中的 .class 文件提取到 WEB-INF/classes 文件夹中。同样,我在项目的 out 文件夹中的 WEB-INF/classes 文件夹中看到它们,但仍然是相同的 java.lang.NoClassDefFoundError: com/nimbusds/oauth2/sdk/id/ClientID
E2:这是完整的 pom.xml:
<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
<modelVersion>4.0.0</modelVersion>
<groupId>IdSrvJPoc</groupId>
<artifactId>IdentityServerJavaPoc</artifactId>
<version>1.0-SNAPSHOT</version>
<dependencies>
<dependency>
<groupId>com.nimbusds</groupId>
<artifactId>oauth2-oidc-sdk</artifactId>
<version>4.9</version>
</dependency>
</dependencies>
</project>
最佳答案
由于您收到 NoClassDefFoundError,因此您的 lib 文件夹中可能仍然缺少依赖项。确保还包括任何 Numbus 依赖项。
关于java - 如何在 IntelliJ IDEA 的 Web 应用程序项目中部署 Maven 依赖项?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33907478/
我是一名优秀的程序员,十分优秀!