7

在 Ant 中,Maven Ant Tasks可用于读取 Maven 属性,如下所示:

<artifact:pom id="mypom" file="pom.xml" />
<echo>The version is ${mypom.version}</echo>

Gradle 中是否有“本机”支持来访问现有物理 pom.xml 文件中的 pom 元素,或者我是否需要在我的 .gradle 文件中执行上述 Ant 方法才能使其工作?

这一页:

http://gradle.org/docs/current/userguide/maven_plugin.html

有关于生成 pom 文件的信息,但这不是我想要的。我试图创建一个相同的 .gradle 文件:

    repositories {
      mavenCentral()
    }

    configurations {
        mavenAntTasks
    }

    dependencies {
        mavenAntTasks 'org.apache.maven:maven-ant-tasks:2.1.1'
    }

    task hello << {
      ant.taskdef(resource: 'org/apache/maven/artifact/ant/antlib.xml',
                  uri: 'antlib:org.apache.maven.artifact.ant',
                  classpath: configurations.mavenAntTasks.asPath)

     // what is the gradle syntax for this:
     // <artifact:pom id="mypom" file="maven-project/pom.xml" />
     // its not a property or a task...
     def artifact = groovy.xml.NamespaceBuilder.newInstance(ant,'antlib:org.apache.maven.artifact.ant')
     artifact.pom(id:'mypom', file: 'pom.xml')
     def text = properties['mypom.version']
     println "From pom file: " + text 

    }

我在 build.gradle 文件旁边有一个简单的 pom.xml 文件。但是我在 gradle docs 中找不到关于此任务的相应 ant 调用的任何信息。我看过:

http://www.gradle.org/docs/current/userguide/ant.html

有关如何阅读 ant 属性和引用的信息,但是:

<artifact:pom id="mypom" file="maven-project/pom.xml" />

似乎既不是属性也不是参考。我偶然发现了这个页面:

http://snipplr.com/view/4082/

使用NamespaceBuilder的地方:

 def mvn = groovy.xml.NamespaceBuilder.newInstance(ant, 'antlib:org.apache.maven.artifact.ant')

但是当使用这种方法时,我得到:

The AbstractTask.getDynamicObjectHelper() method has been deprecated and will be removed in the next version of Gradle. Please use the getAsDynamicObject() method instead.
From pom file: null

经过一番谷歌搜索后,我发现:

http://issues.gradle.org/browse/GRADLE-2385

这似乎相关,但该属性的值仍然为空。

4

4 回答 4

3

以下代码片段应该可以解决。

defaultTasks 'hello'

repositories {
  mavenCentral()
}
configurations {
  mavenAntTasks
}
dependencies {
  mavenAntTasks 'org.apache.maven:maven-ant-tasks:2.1.3'
}

task hello << {
  ant.taskdef(
    resource: 'org/apache/maven/artifact/ant/antlib.xml',
    uri: 'antlib:org.apache.maven.artifact.ant',
    classpath: configurations.mavenAntTasks.asPath)

  ant.'antlib:org.apache.maven.artifact.ant:pom'(id:'mypom', file:'pom.xml')
  println ant.references['mypom'].version
}

我认为通过 groovy xmlslurper 读取 pom 文件更为直接。

于 2012-10-15T16:57:20.637 回答
3

Gradle 不提供解析 POM 文件的原生支持,但 Groovy 的XmlSlurper使 XML 解析变得简单方便。我可能更喜欢 Ant 方法。

于 2012-07-19T10:01:27.527 回答
0

你有没有尝试过

http://www.gradle.org/docs/1.6/userguide/build_setup_plugin.html

这基本上将您的 Maven 项目转换为 gradle。

于 2013-05-30T08:23:38.240 回答
0

请让我知道以下 pom.xml 内容的 build.gradle 文件的条目:

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-eclipse-plugin</artifactId>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-failsafe-plugin</artifactId>
                <version>2.19.1</version>
                <configuration>
                    <additionalClasspathElements>
                        <additionalClasspathElement>resources</additionalClasspathElement>
                    </additionalClasspathElements>
                    <forkCount>5</forkCount>
                    <reuseForks>true</reuseForks>
                    <includes>
                        <include>**/*IT.java</include>
                    </includes>
                    <runOrder>alphabetical</runOrder>
                    <argLine>-Duser.language=en</argLine>
                    <argLine>-Xmx512m</argLine>
                    <argLine>-XX:MaxPermSize=256m</argLine>
                    <argLine>-Dfile.encoding=UTF-8</argLine>
                    <systemPropertyVariables>
                        <!--<cucumber.options>&#45;&#45;tags @example</cucumber.options>-->
                    </systemPropertyVariables>
                </configuration>
                <executions>
                    <execution>
                        <id>failsafe-integration-test</id>
                        <phase>integration-test</phase>
                        <goals>
                            <goal>integration-test</goal>
                        </goals>
                    </execution>
                </executions>
            </plugin>
            <plugin>
                <groupId>com.github.temyers</groupId>
                <artifactId>cucumber-jvm-parallel-plugin</artifactId>
                <version>4.2.0</version>
                <executions>
                    <execution>
                        <id>generateRunners</id>
                        <phase>validate</phase>
                        <goals>
                            <goal>generateRunners</goal>
                        </goals>
                        <configuration>
                            <!-- Mandatory -->
                            <glue>com.cucumber.stepdefinitions</glue>
                            <strict>true</strict>
                            <monochrome>true</monochrome>
                             <!-- These are the default values -->
                            <outputDirectory>${project.build.directory}/generated-test-sources/cucumber</outputDirectory>
                            <featuresDirectory>src/test/resources/features/</featuresDirectory>
                            <cucumberOutputDir>target/cucumber-reports</cucumberOutputDir>
                            <format>json</format>
                             <tags>${TestType}</tags>
                            <tags>~@ignore</tags>
                            <customVmTemplate>
                                src/main/resources/cucumber-custom-runner.vm
                            </customVmTemplate>
                          <!--  <filterFeaturesByTags>true</filterFeaturesByTags>-->
                            <namingScheme>pattern</namingScheme>
                            <namingPattern>{f}_{c}IT</namingPattern>
                            <plugins>
                                <plugin>
                                    <name>com.cucumber.listener.ExtentCucumberFormatter</name>
                                    <extension>html</extension>
                                    <outputDirectory>output/</outputDirectory>

                                </plugin>
                            </plugins>
                            <parallelScheme>SCENARIO</parallelScheme>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
于 2017-11-13T10:30:34.613 回答