Web应用程序的WEB-INF/lib目录是放置jar文件的地方,而servlet容器(例如Tomcat)会自动将其纳入应用程序的类路径中。那么对于Java 9中的模块化jar文件,这个机制是如何工作的(或者将来应该如何工作)?这些模块提供了模块,用户必须指定应用程序使用哪些包含/导出的模块/包。除了(旧的)类路径之外,还有一个模块路径。
一个模块化的jar是否可以在没有任何进一步的规格说明/配置的情况下工作,以便所有导出或包含的模块都会出现在类路径中呢?
Java EE 8和Tomcat 9已经发布。这两个项目声称支持Java 9。因此,应该有一种方式可以按照模块的想法使用Java 9模块。
jaxb-api.jar
版本 2.3.0 (链接),你可能想在 web 应用程序的WEB-INF/lib
中使用它,因为javax.xml.bind
现在已经在 Java API 中被弃用了。 - chris21kjava --module-path lib
,您可以告诉 jvm 在哪里搜索模块化的 jar。然后,使用--add-modules one.java.mod.a
,您可以将模块one.java.mod.a
的包(例如在lib/libx.jar
中)设置到 jvm 的类路径上。只有当lib/libx.jar
显式地导出模块one.java.mod.a
时才可能实现此操作。在lib/libx.jar
或lib
目录中的其他 jar 中可能存在其他模块(具有其他名称),这些模块也可以从外部访问,例如one.java.mod.b
。 - chris21kWEB-INF/lib
仍然存在。我有印象单个应用服务器,多个应用程序部署模型已经死亡,随之而来的是使用多个分层类加载器。我最后一次看到单个JVM运行多个Web应用程序(更不用说这些是独立部署的)可能是十年前了。如果单个JVM运行单个应用程序,则可以以正常方式传递模块,而不需要使用一个drop-in目录。关键是:如果不支持这个,我不会感到太惊讶。 - Barend