繁体   English   中英

如何在IntelliJ IDEA中的Web应用程序项目中部署maven依赖项?

[英]How do I deploy maven dependencies in a web application project in IntelliJ IDEA?

在JetBrain的网站上按照这些步骤创建了一个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:JSP的Javac编译出错

PWC6199:生成的servlet错误:源值1.5已过时,将在以后的版本中删除

PWC6199:生成的servlet错误:目标值1.5已过时,将在以后的版本中删除

PWC6199:生成的servlet错误:要禁止有关过时选项的警告,请使用-Xlint:-options。

PWC6197:jsp文件中的行:8发生错误:/index.jsp PWC6199:生成的servlet错误:无法访问com.nimbusds.oauth2.sdk.SerializeException类文件中找不到com.nimbusds.oauth2.sdk.SerializeException

这是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。

我发现另一个SO答案建议将依赖项的JAR文件复制到glassfish4 \\ glassfish \\ domains \\ domain1 \\ lib文件夹,所以我尝试了它并且它改变了错误:

java.lang.NoClassDefFoundError:com / nimbusds / oauth2 / sdk / id / ClientID

没有找到过时的目标值或类文件,而是NoClassDefFoundError。 现在这是一个不同的课程。 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工件,在Output Layout选项卡上我将jar从Available Elements移动到WEB-INF / lib目录,我发现当我将它们复制到那里时构建,但仍然是相同的错误。

我还尝试让工件将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依赖项。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM