【问题标题】:How to get the name of goal in maven2's Mojo at runtime如何在运行时获取 maven2 的 Mojo 中的目标名称
【发布时间】:2025-12-01 13:00:01
【问题描述】:

对于 Maven2,如何获取 Mojo 的 execute 方法中当前正在执行的目标名称?确切地说,我需要 Mojo 的执行方法中 @goal 属性的值。

【问题讨论】:

    标签: maven-2 maven-plugin mojo


    【解决方案1】:
    public static String getGoalName(PluginDescriptor pluginDescriptor, String mojoClassName) {
            String goalName=null;
            List<MojoDescriptor> mojoDescriptorList = pluginDescriptor.getMojos();
            for (MojoDescriptor mojoDescriptor : mojoDescriptorList) {
                if (mojoDescriptor.getImplementation().equals(mojoClassName)) {
                    goalName=mojoDescriptor.getGoal();
                    break;
                }
            }
            return goalName;
        }
    

    这里,PluginDescriptor 可以从 pluginManager.getPluginDescriptorForPrefix("prefix-for-your-plugin") 中获取。 PluginManager 可用作 @component role="org.apache.maven.plugin.PluginManager"

    【讨论】:

    • 我已经在 maven2 上成功使用了这个解决方案,但是当我切换到 maven3 时它停止了工作。在 maven3 中,它获取 maven 存储库中最新版本的 mojoDescriptorList,而不是我正在使用的版本。因此,如果您在最新版本的插件中删除了一个目标,而您使用的是旧插件,则 mojoDescriptorList 将丢失旧版本插件中仍然存在的目标。