Maven 3.0插件 - 如何设置取决于另一个目标的目标

时间:2016-03-23 16:22:16

标签: java maven maven-3 maven-plugin

我正在开发一个用于构建自定义包类型的Maven插件。 我已经把它打包并创造了一个罚款。但是,我之前的目标是创建一个库文件夹。

我希望我的构建(包)目标确保先前已经运行了先前的Lib目标。我怎么能这样做?

声明构建类如下:

@Mojo(name = "build", defaultPhase = LifecyclePhase.PACKAGE,
      requiresProject = true)
@Execute(goal="lib", phase = LifecyclePhase.PREPARE_PACKAGE)
public class BuildComponent extends AbstractComponentMojo

和lib类一样:

@Mojo(name = "lib", defaultPhase = LifecyclePhase.PREPARE_PACKAGE,
      requiresProject = true)
@Execute(goal="compile", phase = LifecyclePhase.COMPILE)
public class LibComponent extends AbstractLibMojo

这样可以实现两个目标。我想打个电话 <{1}}代替mvn groupId:build成功构建。

我在运行时错过了一些注释处理吗?从我读过的内容来看,我认为我需要一个自定义生命周期来完成这项工作。我找到了Maven Lifecycle Extensions example,但我不确定如何使用它将目标或阶段注入生命周期的maven构建并开始使用。

1 个答案:

答案 0 :(得分:0)

我能够让它运转起来。但是我觉得我正在使用方法而不是方法。我很想看到 Maven 3.0 回答

基本上我删除了@Execute注释,因为无论如何都不需要它们。 然后我添加了文件src/main/resources/META-INF/plexus/components.xml

<?xml version="1.0" encoding="UTF-8"?>
<component-set>
  <components>
    <component>
      <role>org.apache.maven.lifecycle.mapping.LifecycleMapping</role>
      <role-hint>wcc</role-hint>
      <implementation>
         org.apache.maven.lifecycle.mapping.DefaultLifecycleMapping
      </implementation>
      <configuration>
            <phases>
              <process-resources>
                org.apache.maven.plugins:maven-resources-plugin:resources
              </process-resources>
              <compile>
                org.apache.maven.plugins:maven-compiler-plugin:compile
              </compile>
              <process-classes>
                org.ucmtwine:ucm-maven-plugin:classpath
              </process-classes>
              <process-test-resources>
                org.apache.maven.plugins:maven-resources-plugin:testResources
              </process-test-resources>
              <test-compile>
                org.apache.maven.plugins:maven-compiler-plugin:testCompile
              </test-compile>
              <test>
                org.apache.maven.plugins:maven-surefire-plugin:test
              </test>
              <prepare-package>
                org.ucmtwine:ucm-maven-plugin:lib
              </prepare-package>
              <package>
                org.ucmtwine:ucm-maven-plugin:build
              </package>
              <install>
                org.apache.maven.plugins:maven-install-plugin:install
              </install>
              <deploy>
                org.ucmtwine:ucm-maven-plugin:deploy
              </deploy>
            </phases>
      </configuration>
    </component>

    <component>
      <role>org.apache.maven.artifact.handler.ArtifactHandler</role>
      <role-hint>wcc</role-hint>
      <implementation>
        org.apache.maven.artifact.handler.DefaultArtifactHandler
      </implementation>
      <configuration>
        <!--the extension used by Maven in the repository-->
        <extension>zip</extension>
        <!--the type used when specifying dependencies etc.-->
        <type>wcc</type>
        <!--the packaging used when declaring an implementation of
          the packaging-->
        <packaging>wcc</packaging>
      </configuration>
    </component>
  </components>
</component-set>

然后在我正在使用插件的应用程序中 我设置<packaging>wcc</packaging><extensions>true</extensions>我声明我的自定义插件。