在Jetty上下文中,这些JSTL库之间有什么区别?

时间:2019-05-05 13:55:38

标签: java jetty jstl

混淆了很多有关建立具有JSTL功能的JSP应用程序的问题,这是大量具有类似名称的JSTL库的问题。以Gradle表示法表示(尽管此问题并非特定于Gradle),

// https://bintray.com/bintray/jcenter/org.eclipse.jetty%3Aapache-jstl
implementation 'org.eclipse.jetty:apache-jstl:9.4.15.v20190215'

// https://bintray.com/bintray/jcenter/javax.servlet.jsp.jstl%3Ajavax.servlet.jsp.jstl-api
implementation 'javax.servlet.jsp.jstl:javax.servlet.jsp.jstl-api:1.2.2'

// https://bintray.com/bintray/jcenter/javax.servlet.jsp.jstl%3Ajstl-api
implementation 'javax.servlet.jsp.jstl:jstl-api:1.2-rev-1'

// https://bintray.com/bintray/jcenter/javax.servlet.jsp.jstl%3Ajstl
implementation 'javax.servlet.jsp.jstl:jstl:1.2'

// https://bintray.com/bintray/jcenter/javax.servlet%3Ajstl
implementation 'javax.servlet:jstl:1.2'

// https://bintray.com/bintray/jcenter/jstl%3Ajstl
implementation 'jstl:jstl:1.2'

这是JEE新手的理想雷区。 wiki涉及其中三个,将jstl:jstljavax.servlet.jsp.jstl:jstl确定为不良并推荐javax.servlet:jstl,但未提及前三个。

在安装Jetty 9时,我只看到以下名称为“ jstl”的jar:

/usr/share/java/jetty9-apache-jstl.jar
/usr/share/java/jetty9-apache-jstl-9.4.15.v20190215.jar
/usr/share/maven-repo/org/eclipse/jetty/apache-jstl/9.4.15.v20190215/apache-jstl-9.4.15.v20190215.jar
/usr/share/maven-repo/org/eclipse/jetty/apache-jstl/debian/apache-jstl-debian.jar

...但是,当向其部署WAR且引用了org.eclipse.jetty:apache-jstl:9.4.15.v20190215而没有引用任何类型的javax.servlet:jstl:1.2时,JSTL仍然可以工作。

当我减少对...的依赖时

dependencies {
    // Bundled in Ubuntu's libjetty9-java so not embedded
    compileOnly 'org.eclipse.jetty:apache-jsp:9.4.15.v20190215'

    // todo - This should not need to be 'implementation'
    // when hosted in Jetty, this alone is enough to support JSTL
    // in Gretty, this isn't enough
    implementation 'org.eclipse.jetty:apache-jstl:9.4.15.v20190215'
}

gradlew dependencies显示:

runtimeClasspath - Runtime classpath of source set 'main'.
+--- javax.servlet:javax.servlet-api:3.1.0
+--- javax.websocket:javax.websocket-api:1.0
\--- org.eclipse.jetty:apache-jstl:9.4.15.v20190215
     +--- org.apache.taglibs:taglibs-standard-spec:1.2.5
     \--- org.apache.taglibs:taglibs-standard-impl:1.2.5

查看Apache JAR会发现他们进行了一些重新包装-taglibs-standard-spec-1.2.5.jar实际上包含javax.servlet.jsp.jstl的类。

这是怎么回事?为什么在那里不需要推荐的javax.servlet:jstl?更广泛地说,列出的六个库之间的确切区别是什么?

0 个答案:

没有答案