如何讀取war-file manifest 屬性中的jar-dependency?
UPD:此處不使用 servlet(它是 spring-bean 初始化代碼)。
uj5u.com熱心網友回復:
由于 .war 檔案的目的是處理 servlet,因此我假設您的所有代碼都是從 servlet 呼叫的,或者是從構建在 servlet 上的技術(如 JSP、JSF 甚至 Spring)呼叫的。
呼叫當前請求的getServletContext()方法,使用ServletContext的getResource或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 時讀取清單,看來您可以自動裝配 ServletContext 物件:
@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);
}
}
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/482306.html
