2013-06-28 106 views
2

我发现了this example关于如何将Maven side artifact附加到Groovy scriptlet。我已经看到MavenSession.lookup已被弃用,我应该使用依赖注入。让我们假设有以下POM.xml部分:在没有session.lookup的情况下获取GMaven脚本中的MavenProjectHelper

<plugin> 
    <groupId>org.codehaus.gmaven</groupId> 
    <artifactId>gmaven-plugin</artifactId> 
    <version>1.5</version> 
    <executions> 
     <execution> 
      <id>attach-config-artifacts</id> 
      <phase>package</phase> 
      <goals><goal>execute</goal></goals> 
      <configuration> 
       <source> 
        def helper = session.lookup("org.apache.maven.project.MavenProjectHelper") 

        new File('${basedir}').eachFileMatch(~/.[^\.]*.cfg$/) { configFile -> 
         println configFile + " attached as artifact." 
         helper.attachArtifact(project, "cfg", configFile.name, configFile) 
        } 
       </source> 
      </configuration> 
     </execution> 
    </executions> 
</plugin> 

如何将MavenProjetHelper注入到我的scriptlet中?可能吗?我不想创建Mojo或Groovy Mojo,我希望将它内联在POM中。

UPDATE: 如果不清楚:上面的例子完美地工作,但使用了不推荐使用的API(MavenSession.lookup)。这个问题只有在可能将任何东西注入gmaven scriptlet的时候。

回答

0

在这种特殊情况下,仅使用​​可能会更简单。

但是,假设您不想因为任何原因走这条路线,使用GMaven,您必须通过属性对象引用所有对象(如here所示)。此外,GMaven不再被维护。我建议,而不是

<plugin> 
    <groupId>org.codehaus.gmavenplus</groupId> 
    <artifactId>gmavenplus-plugin</artifactId> 
    <version>1.2</version> 
    <executions> 
    <execution> 
     <id>attach</id> 
     <configuration> 
     <scripts> 
      <script><![CDATA[ 
      def helper = session.lookup("org.apache.maven.project.MavenProjectHelper") 
      project.basedir.eachFileMatch(~/.[^\.]*.cfg$/) { configFile -> 
       helper.attachArtifact(project, "cfg", configFile.name, configFile) 
       println "${configFile.name} attached as artifact." 
      } 
      ]]></script> 
     </scripts> 
     </configuration> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <phase>prepare-package</phase> 
    </execution> 
    </executions> 
    <dependencies> 
    <dependency> 
     <groupId>org.codehaus.groovy</groupId> 
     <artifactId>groovy-all</artifactId> 
     <version>2.3.3</version> 
    </dependency> 
    </dependencies> 
</plugin> 

你会注意到我改变了阶段准备包,而不是包。这是因为在阶段的所有默认目标已经运行之后,发生阶段的目标就会发生。因此,将它附加到软件包阶段会在软件包创建完成后将其添加到工件列表中(我认为这不是您想要的)。编辑: 根据您的编辑。这实际上是我之前没有考虑过的问题。看起来没有通过会话调用没有办法(你可以调用session.container.lookup,但session.getContainer()也被弃用)。你真正想要做的就是访问Plexus容器来访问这个对象,如果没有插件本身为你配置它(并且事实上这是Build Helper插件的功能),没有好的方法来做到这一点。您可以将对象添加到绑定的事物列表中,但我不认为您可以使用Maven表达式来获取所需对象的位置。 GMavenPlus 1.3将包含此功能。我已经将它添加到了1.3-SNAPSHOT中,如果你想尝试一下(它在Codehaus仓库中,但它可能在Maven Central的前一天)。这就是它看起来像

<plugin> 
    <groupId>org.codehaus.gmavenplus</groupId> 
    <artifactId>gmavenplus-plugin</artifactId> 
    <version>1.3-SNAPSHOT</version> 
    <executions> 
    <execution> 
     <id>attach</id> 
     <configuration> 
     <scripts> 
      <script><![CDATA[ 
      project.basedir.eachFileMatch(~/.[^\.]*.cfg$/) { configFile -> 
       projectHelper.attachArtifact(project, "cfg", configFile.name, configFile) 
       println "${configFile.name} attached as artifact." 
      } 
      ]]></script> 
     </scripts> 
     </configuration> 
     <goals> 
     <goal>execute</goal> 
     </goals> 
     <phase>prepare-package</phase> 
    </execution> 
    </executions> 
    <dependencies> 
    <dependency> 
     <groupId>org.codehaus.groovy</groupId> 
     <artifactId>groovy-all</artifactId> 
     <version>2.3.4</version> 
    </dependency> 
    </dependencies> 
</plugin> 

如果你有时间,让我知道这是否能解决你的问题。另外,如果我已经完全重新误解了你的问题,让我知道:)

+0

对不起,复活一个死线。我完全错过了这是多大年纪。我认为这是因为某些原因今年6月28日。 – Keegan

+0

除了有趣的事实,GMaven已经死了,你有一个名为gmavenplus的项目,我不得不说,你的回答与我的问题完全没有关系。我知道,构建助手可以附加构件,但据我所知,使用构建助手附加动态构件列表是不可能的,这是由我的脚本完成的。问题只是关于依赖注入的可能性。 –

+0

我提到了构建助手,因为我不确定您是否知道使用正则表达式来匹配您的工件以方便起见,但实际上他们事先知道它们是什么。如果情况并非如此,请忽略我答案的第一段。 至于我回答的第二部分,我不能理解原来的问题。我的理解是,你不明白为什么你的脚本不工作(我没有尝试运行你的例子)。我发布的示例应该与您的示例做同样的事情,并且我已经验证它的工作原理。如果我误解了你的意图,请澄清,我会再试一次。 – Keegan

1

您可以使用ContainerHelper.lookup

def projectHelper = container.lookup("org.apache.maven.project.MavenProjectHelper") 
def artifactFile = new File(project.build.directory, "artifact.zip") 
projectHelper.attachArtifact(project, "zip", null, artifactFile) 
+0

至少使用org.codehaus.gmaven:gmaven-plugin:1.5它不起作用:groovy.lang.MissingPropertyException:没有这样的属性:类的容器:script1417691777869。你使用哪个插件? –

+0

我使用过'org.codehaus.gmaven:groovy-maven-plugin:2.0'([[中央神器]](http://search.maven.org/#artifactdetails%7Corg.codehaus.gmaven%7Cgroovy-maven-plugin% 7C2.0%7Cmaven-插件)) –

相关问题