0

我正在尝试创建一个插件,该插件将从 Maven 中心下载并安装 jar 作为系统工具。所以我希望我的台词像

mvn install-plugin:install org.chaschev:cap4j:1.0

类似于 Ruby 的

gem install capistrano

该插件将收集有关从 JAR 创建的快捷方式所需的所有信息。即这个jar 将包含一个实现安装接口的类。

Maven 是如何理解的,为了执行一个命令,release:prepare它需要下载发布插件并运行它?有没有更好/其他方法来做到这一点?

4

2 回答 2

1

您的意思是如何定义命令行中的插件/目标与插件实现之间的关系?那么答案是plugin.xml。有关发布插件,请参见 plugin.xml,例如 maven-release-plugin-2.0.jar:

<goalPrefix>release</goalPrefix>
...
  <mojos>
    <mojo>
      <goal>help</goal>
      ...
    <mojo>
      <goal>prepare</goal>
      ...

或者你的意思是,Maven 如何发现可用的插件?那么答案是:

  • 搜索插件有两个默认组,org.apache.maven.plugins并且org.codehaus.mojo
  • 对于您自己的插件,您可能需要使用 name ${prefix}-maven-plugin,例如cap4j-maven-plugin
  • 你可以保留你的名字cap4j,然后把插件描述放到你的 POM 中,在<plugins>
  • 如果您希望您的构建在其他机器上工作,它们应该<pluginRepositories>在 POM 或 settings.xml 中指向您的插件存储库
于 2013-09-29T15:48:12.620 回答
0

对你自己的项目使用默认的 Maven 组是不好的。相反,为您的插件定义自己的组,如下所示:

<pluginGroups>
  <pluginGroup>org.chaschev</pluginGroup>
</pluginGroups>

并将您的插件从 重命名cap4jcap4j-maven-plugin. 然后 Maven 将发现您的插件,而无需在 POM 中进一步更改。

替代方案,没有<pluginGroups>,只需将以下内容添加到您的 POM 中:

<plugins>
  <plugin>
    <groupId>org.chaschev</groupId>
    <artifactId>cap4j</artifactId>
    <version>...</version>
    <configuration>
      ...
    </configuration>
  </plugin>
  ...
</plugins>
于 2013-09-29T16:12:56.703 回答