java - Maven 插件如何在执行期间发现自己的版本?

标签 java maven-2 version maven-plugin

我希望能够在执行期间发现我的插件的版本; 0.0.1-快照、0.0.1、1.0-快照等

这能做到吗? AbstractMojo 类并没有真正为您提供有关插件本身的太多信息。

编辑 - 我使用以下代码作为解决方法。它假定插件的 MANIFEST 可以从使用插件本身的资源 URL 构建的资源 URL 加载。这不是很好,但似乎适用于位于文件或 jar 类加载器中的 MANIFEST:

String getPluginVersion() throws IOException {
    Manifest mf = loadManifest(getClass().getClassLoader(), getClass());
    return mf.getMainAttributes().getValue("Implementation-Version");
}

Manifest loadManifest(final ClassLoader cl, final Class c) throws IOException {
    String resourceName = "/" + c.getName().replaceAll("\\.", "/") + ".class";
    URL classResource = cl.getResource(resourceName);
    String path = classResource.toString();

    int idx = path.indexOf(resourceName);
    if (idx < 0) {
        return null;
    }

    String urlStr = classResource.toString().substring(0, idx) + "/META-INF/MANIFEST.MF";

    URL url = new URL(urlStr);

    InputStream in = null;
    Manifest mf = null;
    try {
        in = url.openStream();
        mf = new Manifest(in);
    } finally {
        if (null != in) {
            in.close();
        }
        in = null;
    }

    return mf;
}

最佳答案

我不认为您对 list 文件的“解决方法”是个坏主意。由于它打包在您的插件的 .jar 中,您应该始终可以访问它。

为了让这篇文章成为答案,这里有另一个想法:让 maven 在构建插件期间为您完成肮脏的工作:在插件源中有一个占位符:

private final String myVersion = "[CURRENT-VERSION]";

在编译之前使用 ant-plugin 或其他工具将占位符替换为当前版本。

关于java - Maven 插件如何在执行期间发现自己的版本?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/3160921/

相关文章:

java - 如何在 CDH 上查看 Avro 版本?

java - 应用程序在较低的 API 级别上无法正常工作,但仍高于最低级别

java - JOOQ 元模型 : why is there no Table. 重命名(字符串)?

java - servlet 中的身份验证和授权

java - 调用jsp中的非静态变量和静态函数

eclipse - 在m2eclipse中缓存存储库索引

maven-2 - 从另一个 maven install 命令触发 maven install 命令

maven-2 - 如何告诉 jaxb/Maven 生成多个模式包?

java - 用Java解析curl响应

hbase - 我使用的是哪个版本的 hbase?