如何在jar-dependency中读取war-file manifest属性?UPD:这里没有使用servlet(它是spring-bean初始化代码)。
jar
war
kuuvgm7e1#
因为.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时读取清单,因此显示you can autowire a ServletContext object:
@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); } }
5vf7fwbs2#
可能还有其他方法...如果您可以更改WAR文件的构建配置,那么您可以简单地将所有构建属性添加到一个可访问位置的不同文件中。例如:
<plugin> <groupId>org.codehaus.mojo</groupId> <artifactId>properties-maven-plugin</artifactId> <version>1.0.0</version> <executions> <execution> <phase>generate-resources</phase> <goals> <goal>write-project-properties</goal> </goals> <configuration> <outputFile>${project.build.directory}/classes/maven.properties</outputFile> </configuration> </execution> </executions> </plugin>
之后,您可以从它访问所有需要的信息,而不必担心Manifest文件。
2条答案
按热度按时间kuuvgm7e1#
因为.war文件的目的是处理servlet,所以我假设您的所有代码都是从servlet调用的,或者是从构建在servlet上的技术调用的,比如JSP、JSF,甚至是Spring。
调用当前请求的getServletContext()方法,并使用ServletContext的getResource或getResourceAsStream方法。这些方法的工作方式与java.lang.Class的方法相同,只是它们在搜索Web应用程序的类路径以找到匹配路径之前先查看.war文件本身。
例如:
更新:
由于您希望在准备Spring bean时读取清单,因此显示you can autowire a ServletContext object:
5vf7fwbs2#
可能还有其他方法...如果您可以更改WAR文件的构建配置,那么您可以简单地将所有构建属性添加到一个可访问位置的不同文件中。例如:
之后,您可以从它访问所有需要的信息,而不必担心Manifest文件。