buildNumber插件maven,Spring启动应用程序不能与Tomcat一起使用

时间:2016-05-19 16:09:05

标签: spring maven tomcat

我正在使用:

<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.4</version>
</plugin>

使用Spring Boot应用程序 我将BuildNumber添加到WAR文件中的META-INF \ MANIFEST.MF。

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
</plugin>

当我启动此应用程序时:

  

java -jar MyApp.war

一切都很好。

当我在tomcat(apache-tomcat-8.0.33)中以ROOT应用程序启动它时 - 将资源提取到ROOT目录(没有使用WAR文件)应用程序无法找到我的BuildNumber。

正在寻找BuildNumber的

方法在这里:

@PostConstruct
private void init() {
    try {
        Enumeration<URL> resources = getClass().getClassLoader().getResources("META-INF/MANIFEST.MF");
        while (resources.hasMoreElements()) {
            URL url = resources.nextElement();
            LOGGER.debug("Looking into URL: {} for BuildNumnber", url);
            Manifest manifest = new Manifest(url.openStream());
            Attributes mainAttributes = manifest.getMainAttributes();
            if (mainAttributes != null) {
                Object obj = mainAttributes.get(IMPLEMENTATION_BUILD);
                if (obj != null) {
                    buildNumber = obj;
                    LOGGER.info("Found P3J Build Number: " + buildNumber);
                    break;
                }
            }
        }
    } catch (Exception e) {
        LOGGER.error("Unable to determine build number. {}", e);
    }
}

有什么建议吗?

//修改

此代码仅查看JAR文件中的清单 - 我的BuildNumber在WAR文件中,在Tomcat中它被提取到'webapps / ROOT /'中。但仍有MANIFEST.MF具有正确的Bui​​ldNumber但未被此代码扫描。

如何在Tomcat中查看\ webapps \ ROOT \ META-INF \ MANIFEST.MF的内容?

//修改

answer但是 - 现在我正在寻找如何在Spring Boot应用程序中执行此操作。

1 个答案:

答案 0 :(得分:0)

看起来这个方法解决了我的问题:

@RestController
@RequestMapping("/build")
public class BuildNumberResource {

@Autowired
private ServletContext servletContext;

@PostConstruct
private void init() {

    try {
        InputStream inputStream = servletContext.getResourceAsStream("/META-INF/MANIFEST.MF");
        Manifest manifest = new Manifest(inputStream);
        Attributes mainAttributes = manifest.getMainAttributes();
        if (mainAttributes != null) {
            Object obj = mainAttributes.get(IMPLEMENTATION_BUILD);
            if (obj != null) {
                buildNumber = obj;
                LOGGER.info("Found P3J Build Number in ServletContext.MANIFEST: " + buildNumber);
                return;
            }
        }
    } catch (IOException e) {
        LOGGER.error("Unable to extract BuildNumber from ServletContext. {}", e);
    }

//编辑

看起来不再需要第二部分了

    try {
        Enumeration<URL> resources = getClass().getClassLoader().getResources("META-INF/MANIFEST.MF");
        while (resources.hasMoreElements()) {
            URL url = resources.nextElement();
            LOGGER.debug("Looking into URL: {} for BuildNumnber", url);
            Manifest manifest = new Manifest(url.openStream());
            Attributes mainAttributes = manifest.getMainAttributes();
            if (mainAttributes != null) {
                Object obj = mainAttributes.get(IMPLEMENTATION_BUILD);
                if (obj != null) {
                    buildNumber = obj;
                    LOGGER.info("Found P3J Build Number: " + buildNumber);
                    return;
                }
            }
        }
    } catch (Exception e) {
        LOGGER.error("Unable to determine build number. {}", e);
    }
}

抱歉使用stackoverflowas我的橡皮鸭;)