gpt4 book ai didi

java - 使 JAR 可用于 JDK 和 JRE

转载 作者:行者123 更新时间:2023-12-02 01:39:35 24 4
gpt4 key购买 nike

我正在使用 Tomcat、JDK8 和 Netbeans IDE 运行 Web 应用程序(使用 ANT 进行构建,使用 IVY 进行依赖管理)。

我当前放置了需要可供 JRE 使用的 JAR(servlet-api.jarjsp-api.jarel-api.jartomcat-dbcp.jar)位于JAVA_HOME/jre/lib/ext中。

我正在升级到新的 JDK 版本 (JDK17),该版本不再包含 JRE 扩展文件夹。我想知道应该将这些 JAR 放在哪里。

根据this帖子(以及我见过的其他帖子),最好的做法是使用依赖项管理器并将这些 jar 添加到您的类路径中。

我目前使用 IVY 来管理我的依赖项,并自定义了 ANT 构建,将运行时依赖项添加到构建的 WAR 文件的 WEB-INF/lib 文件夹中.

但是,我不需要上面列出的 JAR 在运行时可供我的应用程序使用,我需要它们可供 JRE 使用。也就是说,我不希望 JAR(servlet-api.jar 等)位于我的 WEB-INF/lib 中构建的 WAR 文件。我怎样才能做到这一点?

澄清我的最后一个问题:

  1. 如何在我的开发环境中使某些 JAR/依赖项可供 Netbeans 中的 JRE 使用?
  2. 如何在生产环境中使用的构建 WAR 文件中使某些 JAR/依赖项可供 JRE 使用?
  3. 我所说的这些 JAR 需要可供 JRE 使用是否正确?我见过的所有帖子都讨论了 compile-time vs run-time dependencies但我所描述的情况似乎是一种不同类别的依赖。这是正确的吗?

最佳答案

I currently place JARs that need to be available to the JRE (servlet-api.jar, jsp-api.jar, el-api.jar, tomcat-dbcp.jar) in JAVA_HOME/jre/lib/ext.

这不是最好的做事方式。请参阅Is putting external jars in the JAVA_HOME/lib/ext directory a bad thing?

请注意,jre/lib/ext 机制已从较新版本的 Java 中删除,因此如果您使用较新版本的 Java,该机制将不再起作用。 (这已经是removed in JDK 9)。

However, I do not need the JARs I listed above to be available to my application at runtime, I need them to be available to the JRE.

为什么?

That is, I do not want the JARs (servlet-api.jar, etc.) to be in WEB-INF/lib of my built WAR file. How can I do this?

为什么不呢?将应用程序所需的依赖项放入 WEB-INF/lib 中是 Java Web 应用程序中的正常做法。为什么你想以非标准的方式做事?

但是:某些 JAR 文件,例如 servlet-api.jarjsp-api.jarel-api.jar不应该包含在您的申请中。这些 JAR 文件定义标准 Java EE/Jakarta EE API,并将在运行时由您部署 WAR 文件的应用程序服务器(Tomcat 等)提供给您的应用程序。

您可以使用具有 provided 范围的 Maven 将这些 JAR 文件添加为依赖项,这意味着它们将在编译时使用,但不会打包到您的应用程序中。

Am I correct in saying that these JARs need to be available to the JRE?

不,这些 JAR 不需要可供 JRE 使用。包含标准 API 的 JAR 文件将由 Java EE/Jakarta EE 容器在运行时提供。其他 JAR 文件应包含在您的应用程序的 WEB-INF/lib 中。

关于java - 使 JAR 可用于 JDK 和 JRE,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/71824893/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com