当前位置: 首页 > 知识库问答 >
问题:

带有Spring Boot应用程序的buildNumber插件maven不能与Tomcat一起工作

岳正阳
2023-03-14
<plugin>
    <groupId>org.codehaus.mojo</groupId>
    <artifactId>buildnumber-maven-plugin</artifactId>
    <version>1.4</version>
</plugin>
<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-war-plugin</artifactId>
</plugin>

当我在tomcat(apache-tomcat-8.0.33)中作为根应用程序启动它时,将资源提取到根目录中(没有使用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);
    }
}

有什么建议吗?

共有1个答案

吴英武
2023-03-14

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

@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);
    }
}
 类似资料:
  • 当我创建RoboVM Eclipse项目时,Eclipse给了我一个例外: 同样,当我尝试转到“设置”>“RoboVM”时,我也会得到这样的消息:

  • 我想从Spring Boot应用程序创建一个war文件,我可以将其部署到独立的Tomcat容器中,而不是使用嵌入式容器。 我可以创建war文件,并使用单独运行它,它工作得很好。 我使用(使用Gradle、Tomcat7、Java1.7)构建了应用程序。 但当我将war文件部署到独立的Tomcat并启动它时,根据日志显示,应用程序似乎没有错误地启动,但我无法访问任何资源,控制器URL也无法工作。 当

  • 我正在尝试使用vue3应用程序中的scss。我有以下错误。 ./src/components/singlepost.vue?vue&type=style&index=0&id=164ef990&lang=scss(./node_modules/css-loader/dist/cjs.js??ref-8-One of-1-1!/node_modules/vue-loader-v16/dist/sty

  • 我想将我的基于vertx的项目移到https://github.com/sczyh30/vertx-blueprint-microservice.git模板。blueprint项目使用annotations@vertxgen等在编译期间生成代码。

  • 但随后构建完全失败,就好像它完全停止识别Java一样。我遇到了许多错误,例如: 这是否意味着Mojo的AspectJ Maven插件不支持JDK9+?我很感激你能帮我解决这个问题。

  • 我正在尝试使用龙目岛和MapStruct配置SpringBoot(v2.6.2),已经配置了maven编译器插件和龙目岛地图结构绑定(注释处理器路径),但龙目岛类尚未创建: pom.xml 尝试使用DI时总是出现未初始化变量错误: 变量xxxx可能尚未初始化