【问题标题】:How to resolve "The type com.sun.crypto.provider.SunJCE is not accessible" with Java11?如何使用 Java11 解决“com.sun.crypto.provider.SunJCE 类型不可访问”?
【发布时间】:2020-05-22 14:20:15
【问题描述】:

我正在尝试将我的应用程序从 Java 8 迁移到 Java 11。在我的一个项目类中,我有 Security.addProvider(new com.sun.crypto.provider.SunJCE()); 行。我收到此行的编译错误。如何解决?

【问题讨论】:

  • 尝试只删除该行。您不应依赖特定的提供者。
  • 嗨@Daniel,欢迎来到 StackOverflow! ???提问时,请确保提供尽可能多的信息。在这种情况下,有点不清楚你得到了什么错误以及何时出现(我认为这是一个编译错误,所以我添加了那个。)
  • 是的,这是一个编译错误,谢谢 Nicolai。
  • @Daniel,看看我的回答,如果有帮助,请告诉我。

标签: java migration java-11


【解决方案1】:

如果没有在编译选项中明确设置它们,您将无法访问 com.sun 包。将--add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED 添加到compilerArgs 后,编译没有任何错误。

代码:

   Security.addProvider(new com.sun.crypto.provider.SunJCE());

马文:

<?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 https://maven.apache.org/xsd/maven-4.0.0.xsd">
    <modelVersion>4.0.0</modelVersion>
    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>demo</name>

    <properties>
        <java.version>11</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
    </properties>

    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-compiler-plugin</artifactId>
                <version>3.8.1</version>
                <configuration>
                    <source>11</source>
                    <target>11</target>
                    <compilerArgs>
                        <arg>--add-exports=java.base/com.sun.crypto.provider=ALL-UNNAMED</arg>
                    </compilerArgs>

                </configuration>
            </plugin>
        </plugins>
    </build>
</project>

java.security.Security.getProviders() 向您返回包括 SunJCE 在内的所有提供者。

   Stream.of(java.security.Security.getProviders()).forEach(System.out::println);

让 SunJCE 即时的更好选择是 java.security.Security.getProvider("SunJCE")

【讨论】:

  • 如果我在运行时遇到同样的问题,你能告诉我应该怎么解决吗?我试过 CATALINA_OPTS="$CATALINA_OPTS -javaagent:$CATALINA_HOME/lib/aspectjweaver-1.9.5.jar" --add-exports java.base/com.sun.crypto.provider=ALL-UNNAMED 但它不工作
猜你喜欢
  • 1970-01-01
  • 2020-04-06
  • 2023-02-10
  • 2020-01-16
  • 2020-03-06
  • 1970-01-01
  • 1970-01-01
  • 2022-06-24
  • 2011-08-10
相关资源
最近更新 更多