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

时间:2015-11-25 02:20:46

标签: java maven jsp intellij-idea glassfish

我跟着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: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答案建议复制依赖关系&#39; 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>

1 个答案:

答案 0 :(得分:2)

由于您收到NoClassDefFoundError,因此您的lib文件夹中可能仍会缺少依赖项。确保包含任何Numbus依赖项。