如何在其 jar 依赖项中读取 war 文件清单?
How to read war-file manifest in its jar-dependency?
如何在其 jar
依赖项中读取 war
文件清单 属性?
UPD:此处未使用 servlet(它是 spring-bean 初始化代码)。
由于 .war 文件的目的是处理 servlet,我假设您的所有代码都是从 servlet 或从基于 servlet 的技术(如 JSP、JSF,甚至Spring.
调用当前请求的ServletContext的getServletContext() method, and use the getResource or getResourceAsStream方法。这些方法的工作方式与 java.lang.Class 的方法相同,只是它们在搜索 Web 应用程序的类路径以查找匹配路径之前先查看 .war 文件本身。
例如:
public Optional<Manifest> getWarManifest(ServletRequest request)
throws IOException {
InputStream manifest =
request.getServletContext().getResourceAsStream(
"/META-INF/MANIFEST.MF");
if (manifest == null) {
return Optional.empty();
}
try (InputStream stream = new BufferedInputStream(manifest)) {
return Optional.of(new Manifest(stream));
}
}
更新:
由于在准备Spring bean时要阅读manifest,出现:
@Configuration
public class MyAppConfig {
@Bean
public MyBean createMyBean(@Autowired ServletContext context)
throws IOException {
Optional<Manifest> manifest;
InputStream source =
context.getResourceAsStream("/META-INF/MANIFEST.MF");
if (source == null) {
manifest = Optional.empty();
} else {
try (InputStream stream = new BufferedInputStream(source)) {
manifest = Optional.of(new Manifest(stream));
}
}
return new MyBean(manifest);
}
}
如何在其 jar
依赖项中读取 war
文件清单 属性?
UPD:此处未使用 servlet(它是 spring-bean 初始化代码)。
由于 .war 文件的目的是处理 servlet,我假设您的所有代码都是从 servlet 或从基于 servlet 的技术(如 JSP、JSF,甚至Spring.
调用当前请求的ServletContext的getServletContext() method, and use the getResource or getResourceAsStream方法。这些方法的工作方式与 java.lang.Class 的方法相同,只是它们在搜索 Web 应用程序的类路径以查找匹配路径之前先查看 .war 文件本身。
例如:
public Optional<Manifest> getWarManifest(ServletRequest request)
throws IOException {
InputStream manifest =
request.getServletContext().getResourceAsStream(
"/META-INF/MANIFEST.MF");
if (manifest == null) {
return Optional.empty();
}
try (InputStream stream = new BufferedInputStream(manifest)) {
return Optional.of(new Manifest(stream));
}
}
更新:
由于在准备Spring bean时要阅读manifest,出现
@Configuration
public class MyAppConfig {
@Bean
public MyBean createMyBean(@Autowired ServletContext context)
throws IOException {
Optional<Manifest> manifest;
InputStream source =
context.getResourceAsStream("/META-INF/MANIFEST.MF");
if (source == null) {
manifest = Optional.empty();
} else {
try (InputStream stream = new BufferedInputStream(source)) {
manifest = Optional.of(new Manifest(stream));
}
}
return new MyBean(manifest);
}
}