No se puede encontrar la biblioteca de etiquetas JSTL al ejecutar la prueba en Maven Surefire

Tengo una aplicación basada en Servlet (implementación de OAuth) que delega parte de la respuesta a JSP, como en el siguiente ejemplo:

private void doLoginPage( AuthorizationSession authzSession, String errorMsg, HttpServletRequest request, HttpServletResponse response ) throws OAuthSystemException {
    try {
        response.setHeader( HTTP.CONTENT_TYPE, ContentType.create( "text/html", "utf-8" ).toString() );
        request.getRequestDispatcher( "/WEB-INF/OAuthLogin.jsp" ).include( request, response );
    } catch ( Throwable e ) {
        throw new OAuthSystemException( "Error generating login page", e );
    }
}

Aquí está el archivo JSP (simplificado):

<%@ page contentType="text/html;charset=UTF-8" language="java" session="false" %>

<%@ taglib prefix="c" uri="http://java.sun.com/jsp/jstl/core" %>

<jsp:useBean id="errorMsg" scope="request" class="java.lang.String"/>

<html>
<head>
<title>Sign In</title>
</head>
<body style="text-align: center;">
<h1>Sign In</h1>
<div style="border: 1px black;">
    <c:if test="${!(empty errorMsg)}">
        <p style="color:red;">${errorMsg}</p>
    </c:if>
    <form method="post" action="<c:url value="/authorize"/>">
        <div><label for="email">Email:</label></div>
        <div><input type="text" name="email" id="email"/></div>
        <div><label for="password">Password:</label></div>
        <div><input type="password" name="password" id="password"/></div>
        <div><input type="submit" title="Sign In" /></div>
    </form>
</div>
</body>
</html>

Tengo mi unidad de prueba configurada para poder ejecutar pruebas basadas en servidor como pruebas unitarias, con simulacros inyectados, usando Jetty como servidor en proceso (OK, entonces no es pura prueba unitaria).

Como parte de la prueba de mi unidad, escribí una prueba para asegurarme de que la página se muestre cuando corresponda y que incluya ciertas propiedades clave (estoy usando TestNG y Hamcrest):

@Test
public void testRequestGrantYieldsLoginPage() throws Exception {
    HttpGet request = new HttpGet( String.format( "%s/authorize?client_id=%s&redirect_uri=%s&response_type=token",
            serverConnector.getServerURL(),
            "*******secret*****",
            URLEncoder.encode( "*****secret*********", "UTF-8" )));

    DefaultHttpClient httpClient = new SystemDefaultHttpClient();
    HttpResponse response = httpClient.execute( request );

    assertThat( response, is( notNullValue() ));
    assertThat( response.getStatusLine().getStatusCode(), is( 200 ));
    assertThat( response.getEntity().getContentType().toString(), containsString( "text/html" ));

    String body = IOUtils.toString( response.getEntity().getContent() );

    assertThat( body, allOf(
            is( notNullValue()),
            containsString( "value=\"gQwCAShitcuP-_2OY58lgw3YW0AfbLE8m62mrvXWvQbiDLJk9QnDTs7pc0HH\"" )
    ));
}

Esto funciona bien cuando ejecuto mis pruebas unitarias desde mi IDE (IntelliJ), pero cuando las ejecuto bajo Maven's Surefire, esta prueba en particular falla: el hilo del servidor arroja una excepción de la siguiente manera:

org.apache.jasper.JasperException: The absolute uri: http://java.sun.com/jsp/jstl/core cannot be resolved in either web.xml or the jar files deployed with this application

Por supuesto, esto hace que el lado del cliente de la prueba falle, ya que devuelve una respuesta de error en lugar de la página de inicio de sesión esperada.

Entonces, ¿qué hay de diferente entre los dos entornos de prueba y cómo puedo hacer que esta prueba funcione en ambos?

Respuestas a la pregunta(1)

Su respuesta a la pregunta