繁体   English   中英

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

[英]Gradle deploy artifacts to a maven repository inside a local directory

什么是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 branch 1.0.0.RELEASEproject的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。

如果您尝试在本地部署(例如~~ .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构建文件中设置url:

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

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

52.6.4.1。 每个项目有多个工件

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

所以我已将uploadArchives从根级别build.gradle到项目级build.gradle ,这解决了这个问题。

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

当您过滤要发布的工件时,也会发生此错误,例如,如果您在uploadArchives中使用以下过滤器上传war文件,则会显示所有其他存档(如war和zip)的错误:

uploadArchives {

    repositories.mavenDeployer {            

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

    }
}

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

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

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

如果您尝试在本地部署(例如~~ .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)
                        } 
                   }
            }

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM