巴塞尔 java.lang.ClassNotFoundException:javax.servlet.http.HttpSessionIdListener

Bazel java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionIdListener

我刚开始将我的项目移植到 bazel。我有一个 java 项目。 在我的主文件中我有这个代码

ServletContextHandler handler = new ServletContextHandler(ServletContextHandler.SESSIONS);

我能够很好地构建代码...但是当我尝试 运行 我得到以下异常

java.lang.ClassNotFoundException: javax.servlet.http.HttpSessionIdListener

我正在使用依赖项

maven_jar(
        name = "javax_servlet_javax_servlet_api",
        artifact = "javax.servlet:javax.servlet-api:3.1.0",
        repository = "http://uk.maven.org/maven2/",
        sha1 = "6bf0ebb7efd993e222fc1112377b5e92a13b38dd",
    )

应该有这个文件。可能是什么问题。

java_binary(

        name = "app",
        main_class = "com.example.Main",
        runtime_deps = [":allFiles"],
    )

    java_library(
        name = "allFiles",
        srcs = glob(["src/main/java/**/*.java"]),
        resources = glob(["src/main/resources/**/*"]),
        deps = [
            "//thirdparty:javax_servlet_javax_servlet_api",
            ...
    ])

以上是我在 BUILD 文件中的内容。问题是 java 库 allFiles 构建良好。但是当我 运行 app 我得到异常。我知道调用了主文件,因为我可以在 Main.java 文件中看到抛出异常的行。

我发现了 运行 时间错误。 最初当我从 maven pom 文件生成我的依赖项时。它给了我

maven_jar(
        name = "javax_servlet_javax_servlet_api",
        artifact = "javax.servlet:javax.servlet-api:3.0.1",
        repository = "http://uk.maven.org/maven2/",
        sha1 = "6bf0ebb7efd993e222fc1112377b5e92a13b38dd",
    )

但是码头服务器需要的版本是 3.1.0 所以我把代码改成了

 maven_jar(
            name = "javax_servlet_javax_servlet_api",
            artifact = "javax.servlet:javax.servlet-api:3.1.0",
            repository = "http://uk.maven.org/maven2/",
            sha1 = "6bf0ebb7efd993e222fc1112377b5e92a13b38dd",
        )

但是我没有更改 sha1。删除 sha1 解决了这个问题。现在既没有构建也没有 运行时间错误。

终于

 maven_jar(
                name = "javax_servlet_javax_servlet_api",
                artifact = "javax.servlet:javax.servlet-api:3.1.0",
                repository = "http://uk.maven.org/maven2/",
            )