在不使用session.lookup的情况下在GMaven脚本中获取MavenProjectHelper

在不使用session.lookup的情况下在GMaven脚本中获取MavenProjectHelper,maven,groovy,dependency-injection,mojo,gmaven,Maven,Groovy,Dependency Injection,Mojo,Gmaven,我发现了如何使用Groovy scriptlet附加Maven端工件。我已经看到,已弃用了,我应该使用依赖项注入。假设具有以下POM.xml部分: <plugin> <groupId>org.codehaus.gmaven</groupId> <artifactId>gmaven-plugin</artifactId> <version>1.5</version> <exec

我发现了如何使用Groovy scriptlet附加Maven端工件。我已经看到,已弃用了,我应该使用依赖项注入。假设具有以下POM.xml部分:

<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>

org.codehaus.gmaven
gmaven插件
1.5
附加配置工件
包裹
执行
def helper=session.lookup(“org.apache.maven.project.MavenProjectHelper”)
新文件(“${basedir}”).eachFileMatch(~/.[^\.]*.cfg$/){configFile->
println configFile+“作为工件附加。”
helper.attachArtifact(项目“cfg”、configFile.name、configFile)
}
如何将MavenProjetHelper注入到脚本中?可能吗?我不想创建Mojo或Groovy Mojo,我希望将其内联到POM中

更新:
如果不清楚的话:上面的例子工作得很好,但是使用了一个不推荐使用的API(MavenSession.lookup)。问题是,只有在可以向gmaven scriptlet中注入任何内容的情况下,才可能出现。

在这种特殊情况下,只需使用

但是,假设您不想因为任何原因而使用GMaven,那么您必须通过properties对象引用所有对象(如图所示)。此外,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>

org.codehaus.gmavenplus
gmavenplus插件
1.2
贴上
helper.attachArtifact(项目“cfg”、configFile.name、configFile)
println“${configFile.name}作为工件附加。”
}
]]>
执行
准备包装
org.codehaus.groovy
groovy all
2.3.3
你会注意到我将阶段改为准备包而不是包。这是因为附加到某个阶段的目标发生在该阶段的所有默认目标都已运行之后。因此,将其附加到包阶段将在包已经创建之后将其添加到工件列表中(我假设这不是您想要的)


编辑: 根据你的编辑。这实际上是一个我以前从未考虑过的问题。看起来没有办法不通过会话调用(您可以调用session.container.lookup,但session.getContainer()也不推荐使用)。您真正想要做的是访问Plexus容器来访问这个对象,如果插件本身没有为您连接好它,那么就没有什么好方法可以做到这一点(事实上,这就是Build Helper插件所做的)。您可以将对象添加到绑定到的对象列表中,但我不认为有一个Maven表达式可以用来获取所需的对象。GMavenPlus 1.3将包括此功能。如果你想试一试的话,我已经将它添加到了1.3快照中(它在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>

org.codehaus.gmavenplus
gmavenplus插件
1.3-1
贴上
projectHelper.attachArtifact(项目“cfg”、configFile.name、configFile)
println“${configFile.name}作为工件附加。”
}
]]>
执行
准备包装
org.codehaus.groovy
groovy all
2.3.4
如果你有时间,让我知道这是否解决了你的问题。另外,如果我再次完全误解了您的问题,请告诉我:)

您可以使用:


很抱歉让一条死线复活了。我完全想不起这有多大了。出于某种原因,我以为是今年6月28日。除了有趣的事实,GMaven已经死了,你有一个名为gmavenplus的项目,我不得不说,你的回答与我的问题完全无关。我知道,build helper可以附加工件,但据我所知,不可能使用build helper附加工件的动态列表,这是由我的脚本完成的。问题只是关于依赖注入的可能性。我提到build helper是因为我不确定您是否知道为了方便起见使用正则表达式匹配工件,但实际上事先知道它们是什么。如果不是这样,请忽略我答案的第一段。至于我答覆的第二部分,我一定不明白原来的问题。我的理解是,您不理解为什么脚本不起作用(我没有尝试运行您的示例)。我发布的示例应该与您的示例做相同的事情,我已经验证了它的有效性。如果我误解了您的意图,请澄清,我会再试一次。至少对于org.codehaus.gmaven:gmaven plugin:1.5,它不起作用:groovy.lang.MissingPropertyException:没有这样的属性:类的容器:script1417691777869。你使用了哪个插件?我使用了
org.codehaus.gmaven:groovy maven插件:2.0
()
def projectHelper = container.lookup("org.apache.maven.project.MavenProjectHelper")
def artifactFile = new File(project.build.directory, "artifact.zip")
projectHelper.attachArtifact(project, "zip", null, artifactFile)