Tomcat 7.0.73 不适用于 java 9
Posted
技术标签:
【中文标题】Tomcat 7.0.73 不适用于 java 9【英文标题】:Tomcat 7.0.73 doesn't work with java 9 【发布时间】:2018-02-05 15:05:53 【问题描述】:由于 catalina.sh 中的默认“java.endorsed.dirs”选项,无法使用 java 9 启动基于 tomcat 的应用程序。
-Djava.endorsed.dirs=/usr/local/share/tomcat/endorsed is not supported. Endorsed standards and standalone APIs in modular form will be supported via the concept of upgradeable modules.
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
有解决办法吗?
【问题讨论】:
好吧,寻找this SO question 的解决方案,我已经意识到并提出了another SO,这一切都归结为使用java 9,出于适应性原因您需要使用Tomcat 9。简而言之,尝试使用apache-tomcat-9.0.0.M26
和 jdk-9+181
执行您的应用程序以找出确切的故障。
【参考方案1】:
您必须破解脚本 bin/catalina.sh
才能使其工作。
bin/catalina.sh
中有一堆这样的行:
exec "$_RUNJDB" "$LOGGING_CONFIG" $LOGGING_MANAGER $JAVA_OPTS $CATALINA_OPTS \
-Djava.endorsed.dirs="$JAVA_ENDORSED_DIRS" -classpath "$CLASSPATH" \
...
只需在每种情况下删除这些行中的第二行(带有-Djava.endorsed.dirs
的行),您就应该重新开始工作了。
我正在考虑改进这些脚本,以便在值为空时不向 JVM 提供 -Djava.endorsed.dirs
(如果您使用的是 Java 9,则应该是这种情况)。
2017 年 11 月 6 日更新
看起来r1810284 应该可以解决endorsed.dirs
的问题。预计此修复将包含在 Tomcat 7.0.83 中(或任何通过投票的下一个 7.0.x 版本)。
2018-03-07 更新
包含此修复程序的 Apache Tomcat 7.0.x 的第一个正式版本是 Apache Tomcat 7.0.84,于 2018 年 1 月 24 日投票稳定。
【讨论】:
WTP 人员在bugs.eclipse.org/bugs/show_bug.cgi?id=507338 实施了类似的检查,如果您还没有更改catalina.sh
,我可以自愿为它提供补丁。
@Kilokahn 补丁总是受欢迎的!在 Github 上发布到用户列表或 fork+PR。
我在github上添加了一个PR-github.com/apache/tomcat70/pull/13
我收回了 PR,因为最新的代码似乎已经解决了它。我们什么时候可以期待下一个 7.x 版本?
@Kilokahn 无论如何,感谢您的贡献。随意对 Tomcat 或任何其他 ASF 项目进行额外的 PR。 Bugzilla 是一个寻找容易获得的成果的好地方,我们有意将其作为介绍给新的贡献者。如果您想更多地参与,请加入用户和开发者邮件列表。【参考方案2】:
上述问题已在 Eclipse 的更高版本中得到修复,但不幸的是,随着 Java 10 的发布,它再次出现。这是我的研究: 最初,我安装了 Java 10 和 Eclipse Oxygen 3,这给了我你在问题中提到的相同错误。但是,当我安装 Java 9 并将我的 Apache Tomcat 运行时服务器指向它时,错误就消失了。
【讨论】:
对 Java 10 及更高版本的支持已在后续版本中修复。【参考方案3】:在我的情况下,我为回答 Tomcat 无法运行的问题所做的就是将 Tomcat(版本 7)设置为较低的 Java 版本(例如 Java 8)。
然后,在 startup.sh、shutdown.sh 和 catalina.sh 我添加了以下内容:
export JAVA_HOME=`/usr/libexec/java_home -v 1.8`;
【讨论】:
我想使用 java9+ 版本运行,因此这个解决方案对我不起作用,但是当我们正在编辑 catalina.sh 时,我们可以简单地添加代码以完全删除认可的 dir 属性,如上所示。跨度> 谢谢,我几分钟前才这样做,上面的评论超出了我的范围(对不起)......我只是为那些刚刚将他们的 java 版本升级到 9 的人留下我的评论并发现他们的 tomcat7 不工作...... 最好修改(或创建,如果不存在)conf/setenv.sh
,而不是修改 Tomcat 附带的任何脚本。【参考方案4】:
如果您的 Tomcat 运行时使用早于 Java 9 的 JRE,并且使用该运行时创建和运行服务器,则可能会出现此症状。然后编辑 Tomcat Runtime 以使用 Java 9 并尝试启动服务器。发生的情况是,当使用早期 JRE 运行服务器时,“-Djava.endorsed.dirs”参数被添加到启动配置中。切换到Java 9后运行服务器时,“-Djava.endorsed.dirs”参数被视为用户添加的VM参数并保留,导致错误。
最简单的修复方法是重新创建服务器。您也可以在服务器视图中右键单击服务器并选择打开。在打开的窗口中,单击“常规”部分底部的“打开启动配置”链接。在打开的对话框中,切换到“参数”选项卡,在“VM 参数”部分中,编辑“-Djava.endorsed.dirs”参数并单击“确定”。您现在应该可以启动服务器了。
【讨论】:
【参考方案5】:要修复此错误,您需要将 Eclipse Web 工具平台 (WTP) 安装/更新到 3.9.4 或更高版本。
选择帮助 > 安装新软件... 选择或添加以下网址:http://download.eclipse.org/webtools/repository/oxygen 检查 Web 工具平台 (WTP) 3.9.4 选择“下一步”并按照说明进行操作
在eclipse中重新配置tomcat。
【讨论】:
对 Java 10 及更高版本的支持已在后续版本中得到修复。【参考方案6】:在运行配置中 -> 参数 -> VM 参数 尝试删除
-Djava.endorsed.dirs="C:\Program Files\Apache Software Foundation\Tomcat 8.5\endorsed"
【讨论】:
【参考方案7】:你必须删除 -
"-Djava.endorsed.dirs="/home/ttlaptop/Downloads/apache-tomcat-7.0.105/endorsed"
从运行配置,然后tomcat将启动
【讨论】:
【参考方案8】:我不能确定,但是..
第一步——> 它对我有用,我只是从 eclipse 中删除服务器
第 2 步 --> 重新启动并再次添加服务器(tomcat 7) 本地主机上的 Tomcat v7.0 服务器
【讨论】:
以上是关于Tomcat 7.0.73 不适用于 java 9的主要内容,如果未能解决你的问题,请参考以下文章
tomcat 7 7.0.73 url 参数 大括号 {} 不支持 , 7.0.67支持
代码适用于嵌入式Apache Tomcat 8但不适用于9。有什么改变?