netbeans 使JAR可用于JDK和JRE

iyzzxitl  于 2022-11-10  发布在  其他
关注(0)|答案(1)|浏览(179)

我正在使用Tomcat、JDK 8和Netbeans IDE运行一个Web应用程序(使用ANT进行构建,使用IVY进行依赖项管理)。
我目前将需要对JRE可用的JARsservlet-api.jarjsp-api.jarel-api.jartomcat-dbcp.jar)放置在JAVA_HOME/jre/lib/ext中。
我正在升级到一个新的JDK版本(JDK 17),它不再有JRE扩展文件夹。我想知道我应该把这些JARs放在哪里。
根据this post(以及我看到的其他文章),使用依赖管理器并将这些jar添加到类路径中是更好的做法。
我目前使用IVY来管理我的依赖项,并且已经定制了我的ANT构建,以便将运行时依赖项添加到构建的WAR文件的WEB-INF/lib文件夹中。
但是,我不需要上面列出的JARs在运行时对我的应用程序可用,我需要它们对JRE可用。也就是说,我不希望JARsservlet-api.jar等)在我构建的WAR文件的WEB-INF/lib中。我该怎么做呢?
我最后的问题是:
1.在我的开发环境中,如何使某些JARs/相关性可用于Netbeans中的JRE?
1.如何使某些JARs/依赖项可用于生产环境中使用的已构建WAR文件中的JRE?
1.我说这些JARs需要对JRE可用,对吗?我看到的所有帖子都讨论了compile-time vs run-time dependencies,但我描述的情况似乎是一个不同类别的依赖关系。这对吗?

7kqas0il

7kqas0il1#

我目前将需要对JRE可用的JAR(servlet-api.jarjsp-api.jarel-api.jartomcat-dbcp.jar)放置在JAVA_HOME/jre/lib/ext中。
这不是最好的做事方式。请参阅Is putting external jars in the JAVA_HOME/lib/ext directory a bad thing?
请注意,jre/lib/ext机制已从较新版本的Java中删除,因此如果您使用较新版本的Java,该机制将不再起作用。(JDK 9中已删除该机制)。
但是,我不需要上面列出的JAR在运行时可用于我的应用程序,我需要它们可用于JRE。
为什么?
也就是说,我不希望JAR(servlet-api.jar等)在我构建的WAR文件的WEB-INF/lib中。我该如何做到这一点?
为什么不呢?将应用程序所需的依赖项放在WEB-INF/lib中是Java Web应用程序中的正常做法。为什么要用非标准的方式来做呢?
但是:某些JAR文件(如servlet-api.jarjsp-api.jarel-api.jar)不应包含在应用程序中。这些JAR文件定义了标准的Java EE / Jakarta EE API,并将在运行时由部署WAR文件的应用服务器(Tomcat等)提供给应用程序。
您可以使用Maven以provided范围将这些JAR文件作为依赖项添加,这意味着它们将在编译时使用,但不会打包到应用程序中。
我说这些JAR需要对JRE可用,对吗?
不需要,JRE不需要使用这些JAR。包含标准API的JAR文件将在运行时由Java EE / Jakarta EE容器提供。其他JAR文件应包含在WEB-INF/lib中的应用程序中。

相关问题