7

Ant では、Maven Ant タスクを使用して、次のように Maven プロパティを読み取ることができます。

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

既存の物理 pom.xml ファイルから pom 要素にアクセスするための Gradle の「ネイティブ」サポートはありますか、それとも .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 ファイルがあります。しかし、このタスクに対応する ant 呼び出しに関する情報が gradle docs に見つかりません。私は見ました:

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

関連しているように見えますが、プロパティの値はまだ null です。

4

4 に答える 4

3

Gradle は POM ファイルを解析するためのネイティブ サポートを提供しませんが、Groovy のXmlSlurperは XML 解析を簡単かつ便利にします。私はおそらくAntのアプローチよりもそれを好むでしょう。

于 2012-07-19T10:01:27.527 に答える
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 に答える
0

やってみました

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

これは基本的に、maven プロジェクトを gradle に変換します。

于 2013-05-30T08:23:38.240 に答える