Gradle将工件部署到本地目录中的maven存储库

时间:2014-06-03 08:38:24

标签: maven gradle

什么是Gradle相当于Maven的:

<distributionManagement>
    <repository>
        <id>internal.repo</id>
        <name>Temporary Staging Repository</name>
        <url>file://${project.build.directory}/mvn-repo</url>
    </repository>
</distributionManagement>

<build>
 <plugins>
    <plugin>
        <artifactId>maven-deploy-plugin</artifactId>
        <version>2.8.1</version>
        <configuration>
               <altDeploymentRepository>internal.repo::default::file://${project.build.directory}/mvn-repo</altDeploymentRepository>
        </configuration>
    </plugin>
 </plugins>
</build>

我试过了:

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: "file:///tmp/mvn-repo")
        }
    }
}

但它会抛出:

[ant:null] Error reading settings file '/private/var/folders/KH/KH+cubLjEESWzOTqVrx-bU+++TI/-Tmp-/gradle_empty_settings7564764539012703872.xml' - ignoring. Error was: /private/var/folders/KH/KH+cubLjEESWzOTqVrx-bU+++TI/-Tmp-/gradle_empty_settings7564764539012703872.xml (No such file or directory)

我正在处理的项目是git://github.com/SpringSource/spring-data-rest.git分支1.0.0.RELEASEproject's build.gradle

完成Gradle输出:

gradle uploadArchives
The groovy configuration has been deprecated and is scheduled to be removed in Gradle 2.0. Typically, usages of 'groovy' can simply be replaced with 'compile'. In some cases, it may be necessary to additionally configure the 'groovyClasspath' property of GroovyCompile and Groovydoc tasks.
:uploadArchives
[ant:null] Error reading settings file '/private/var/folders/KH/KH+cubLjEESWzOTqVrx-bU+++TI/-Tmp-/gradle_empty_settings396071803108301794.xml' - ignoring. Error was: /private/var/folders/KH/KH+cubLjEESWzOTqVrx-bU+++TI/-Tmp-/gradle_empty_settings396071803108301794.xml (No such file or directory)
:spring-data-rest-core:compileJava UP-TO-DATE
:spring-data-rest-core:compileGroovy UP-TO-DATE
:spring-data-rest-core:processResources UP-TO-DATE
:spring-data-rest-core:classes UP-TO-DATE
:spring-data-rest-core:jar UP-TO-DATE
:spring-data-rest-core:javadoc UP-TO-DATE
:spring-data-rest-core:javadocJar UP-TO-DATE
:spring-data-rest-core:sourcesJar UP-TO-DATE
:spring-data-rest-core:uploadArchives
:spring-data-rest-repository:compileJava UP-TO-DATE
:spring-data-rest-repository:compileGroovy UP-TO-DATE
:spring-data-rest-repository:processResources UP-TO-DATE
:spring-data-rest-repository:classes UP-TO-DATE
:spring-data-rest-repository:jar UP-TO-DATE
:spring-data-rest-repository:javadoc UP-TO-DATE
:spring-data-rest-repository:javadocJar UP-TO-DATE
:spring-data-rest-repository:sourcesJar UP-TO-DATE
:spring-data-rest-repository:uploadArchives
:spring-data-rest-webmvc:compileJava UP-TO-DATE
:spring-data-rest-webmvc:compileGroovy UP-TO-DATE
:spring-data-rest-webmvc:processResources UP-TO-DATE
:spring-data-rest-webmvc:classes UP-TO-DATE
:spring-data-rest-webmvc:jar UP-TO-DATE
:spring-data-rest-webmvc:javadoc UP-TO-DATE
:spring-data-rest-webmvc:javadocJar UP-TO-DATE
:spring-data-rest-webmvc:sourcesJar UP-TO-DATE
:spring-data-rest-webmvc:uploadArchives

我使用的是Gradle 1.12。

4 个答案:

答案 0 :(得分:4)

如果您尝试在本地部署(例如~~ .m2),则需要:

apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            mavenLocal()
        }
    }
}

我没有尝试在默认情况下使用存储库,但我相信您可以在〜/ .m2 / settings.xml中设置存储库位置:

<settings xmlns="http://maven.apache.org/SETTINGS/1.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/SETTINGS/1.0.0
  http://maven.apache.org/xsd/settings-1.0.0.xsd">
  <localRepository>/tmp/mvn_repo</localRepository>
  ...
</settings>

或者您可以在gradle构建文件中设置网址:

maven {
     url uri('/tmp/mvn_repo')
} 

答案 1 :(得分:3)

找到问题的原因。我正在构建的项目是一个多模块项目,here我找到了这个信息:

  

52.6.4.1。每个项目有多个工件

     

Maven每个项目只能处理一个工件。这反映在Maven POM的结构中。我们认为在很多情况下每个项目都有多个工件是有意义的。在这种情况下,您需要生成多个POM。在这种情况下,您必须显式声明要发布到Maven存储库的每个工件。

因此,我已将uploadArchives从根级build.gradle移至项目级build.gradle,这解决了问题。

我认为关于maven的setting.xml的错误消息非常具有误导性,应由Gradle团队修复。

答案 2 :(得分:2)

当您对正在发布的工件进行过滤时也会发生此错误,例如,如果您在uploadArchives中使用以下过滤器上传war文件,则会显示错误所有其他档案,如战争和邮编:

uploadArchives {

    repositories.mavenDeployer {            

        addFilter('war') {artifact, file ->
            artifact.ext == 'war'
        }

    }
}

您需要为需要发布的每个工件显式添加过滤器:

        addFilter('jar') {artifact, file ->
            artifact.ext == 'jar'
        }

        addFilter('zip') {artifact, file ->
            artifact.ext == 'zip'
        }

答案 3 :(得分:0)

如果您尝试在本地部署(例如~~ .m2 / repository),那么: gradle中的1.mavenLocal()方法检查settings.xml中的localRepository(如果它不存在)

<localRepository>${user.home}/.m2/repository</localRepository>

2.添加以下内容以构建.gradle文件

apply plugin: 'maven'

uploadArchives {
      repositories {
          mavenDeployer {
                         repository(url: mavenLocal().url)
                        } 
                   }
            }