使用gradle从nexus服务器复制最新的jar文件

Dav*_*Far 11 nexus gradle maven build.gradle

我正在尝试com.bar.baz:mapping:0.0.1-SNAPSHOT使用Gradle从Nexus服务器复制最新的jar文件()。

使用以下build.gradle可以下载特定版本:

apply plugin: "java"

repositories {
    maven {
        credentials  {
            username = "${mavenUser}"
            password = "${mavenPassword}"
        }
        url "https://nexus.cluster.foo.cloud/repository/maven-snapshots"
        authentication {
            basic(BasicAuthentication)
        }
    }
}

configurations {
    copyConf
}

dependencies {
    copyConf group: "com.bar.baz", name: "mapping", version: "0.0.1-20190508.085532-7"
}

task copyTask(type: Copy) {
    from configurations.copyConf
    into "."
}
Run Code Online (Sandbox Code Playgroud)

但是我想下载最新0.0.1-SNAPSHOT版本,而不是特定0.0.1-20190508.085532-7版本。那可能吗?怎么样?

使用version "latest.integration"而不是"0.0.1-20190508.085532-7"(并调用gradle copyTask --refresh-dependencies --stacktrace)会产生:

FAILURE: Build failed with an exception.

* What went wrong: Could not resolve all files for configuration ':copyConf'.
> Could not find any matches for com.bar.baz:mapping:latest.integration as no versions
of com.bar.baz:mapping are available.   Searched in
the following locations:
      https://nexus.cluster.foo.cloud/repository/maven-snapshots/com/ba/baz/mapping/maven-metadata.xml
      https://nexus.cluster.foo.cloud/repository/maven-snapshots/com/bar/baz/mapping/0.0.1-SNAPSHOT/maven-metadata.xml
      https://nexus.cluster.foo.cloud/repository/maven-snapshots/com/bar/baz/mapping/0.0.1-SNAPSHOT/mapping-0.0.1-20190508.085534-8.pom
      https://nexus.cluster.foo.cloud/repository/maven-snapshots/com/bar/baz/mapping/0.0.1-SNAPSHOT/mapping-0.0.1-20190508.085534-8.jar
Required by:
      project :

* Try: Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is: org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException:
Could not resolve all files for configuration ':copyConf'.
        at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.rethrowFailure(DefaultConfiguration.java:918)
        at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.access$1600(DefaultConfiguration.java:116)
        at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration$ConfigurationFileCollection.getFiles(DefaultConfiguration.java:892)
        at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.getFiles(DefaultConfiguration.java:404)
        at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration_Decorated.getFiles(Unknown
Source)
        at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext$FileTreeConverter.convertInto(DefaultFileCollectionResolveContext.java:206)
        at org.gradle.api.internal.file.collections.DefaultFileCollectionResolveContext.doResolve(DefaultFileCollectionResolveContext.java:116)
…
Run Code Online (Sandbox Code Playgroud)

更新:

使用version "0.0.1-SNAPSHOT"而不是"0.0.1-20190508.085532-7"(并调用gradle copyTask --refresh-dependencies --stacktrace)会产生几乎相同的错误,唯一的区别是:

  • 第2行改为:

    找不到com.bar.baz:mapping:0.0.1-SNAPSHOT。

  • 找不到位置 https://nexus.cluster.foo.cloud/repository/maven-snapshots/com/ba/baz/mapping/maven-metadata.xml

使用version "0.0.1"而不是"0.0.1-20190508.085532-7"(并调用gradle copyTask --refresh-dependencies --stacktrace)会产生:

FAILURE: Build failed with an exception.

* What went wrong:
Could not resolve all files for configuration ':copyConf'.
> Could not resolve com.bar.baz:mapping:0.0.1.
  Required by:
      project :
   > Could not resolve com.bar.baz:mapping:0.0.1.
      > Could not get resource 'https://nexus.cluster.regulator.cloud/repository/maven-snapshots/com/bar/baz/mapping/0.0.1/mapping-0.0.1.pom'.
         > Could not GET 'https://nexus.cluster.regulator.cloud/repository/maven-snapshots/com/bar/baz/mapping/0.0.1/mapping-0.0.1.pom'. Received status code 400 from server: Bad Request

* Try:
Run with --info or --debug option to get more log output. Run with --scan to get full insights.

* Exception is:
org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration$ArtifactResolveException: Could not resolve all files for configuration ':copyConf'.
        at org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.rethrowFailure(DefaultConfiguration.java:918)
...
Run Code Online (Sandbox Code Playgroud)

另一个更新:

使用以下pom.xml从nexus服务器使用maven复制最新的jar文件可以正常工作:

<project xmlns="http://maven.apache.org/POM/4.0.0"
  xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
  xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
  <modelVersion>4.0.0</modelVersion>
  <groupId>com.bar.baz</groupId>
  <artifactId>TAndMapping</artifactId>
  <version>0.0.1-SNAPSHOT</version>
  <name>${project.artifactId}</name>

  <properties>
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    <mapping>mapping</mapping>
  </properties>
  <build>
    <plugins>
      <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-dependency-plugin</artifactId>
        <version>3.1.1</version>
        <executions>
          <execution>
            <id>copy</id>
            <phase>package</phase>
            <goals>
              <goal>copy</goal>
            </goals>
          </execution>
        </executions>
        <configuration>
          <artifactItems> 
            <artifactItem>
              <groupId>com.bar.baz</groupId>
              <artifactId>${mapping}</artifactId>
              <version>0.0.1-SNAPSHOT</version>
              <type>jar</type>
              <overWrite>true</overWrite>
              <destFileName>${mapping}.jar</destFileName>   
            </artifactItem>
          </artifactItems>
          <overWriteSnapshots>true</overWriteSnapshots>
        </configuration>
      </plugin> 
    </plugins>
  </build>
  <repositories>
    <repository>
      <id>nexus-snapshots</id>
      <name>Snapshot</name>
      <url>https://nexus.cluster.regulator.cloud/repository/maven-snapshots/</url>
    </repository>
  </repositories>
</project>
Run Code Online (Sandbox Code Playgroud)

另一个更新:切换到Gradle 5.4.1,我得到了一些不同的堆栈跟踪:

对于版本latest.integration

  • 异常是:org.gradle.api.tasks.TaskExecutionException:任务':copyTask'的执行失败。在org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter $ 1.executeTask(EventFiringTaskExecuter.java:73)在org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38)在org.org。在org.gradle的gradle.api.internal.tasks.execution.EventFiringTaskExecuter $ 1.call(EventFiringTaskExecuter.java:52)在org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter $ 1.call(EventFiringTaskExecuter.java:49)在org.gradle。 org.gradle.internal.operations.DefaultBuildOperationExecutor $ CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.DefaultBuildOperationExecutor.java:416)的internal.operations.DefaultBuildOperationExecutor $ CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)202),位于org.gradle.execution.plan.DefaultPlanExecutor $ ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193),位于org.gradle.execution.plan.DefaultPlanExecutor $ ExecutorWorker.run(DefaultPlanExecutor.java:129),位于org.gradle.internal org.gradle.internal.concurrent.ManagedExecutorImpl $ 1.run(ManagedExecutorImpl.java:46)上的.concurrent.ExecutorPolicy $ CatchAndRecordFailures.onExecute(ExecutorPolicy.java:63)在org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable。 ThreadFactoryImpl.java:55)由以下原因引起:org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration $ ArtifactResolveException:无法解析配置':copyConf'的所有文件。在org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.rethrowFailure(DefaultConfiguration.java:org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)的FinalizePropertiesTaskExecuter.execute(FinalizePropertiesTaskExecuter.java:46)在org.gradle.api.internal.tasks.executionNo.SkipTask在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)处的SkipTaskWithNoActionsExecuter.java:57)在org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter。 36)... 24更多原因:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:latest.integration的任何匹配项,因为没有可用的com.bar.baz:mapping版本。 。在以下位置搜索:在org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(Execute.FinalizePropertiesTaskExecuter.java:46)在org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)在org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute( java:57)位于org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)位于org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) ... 24更多原因:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:latest.integration的任何匹配项,因为没有可用的com.bar.baz:mapping版本。在以下位置搜索:在org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(Execute.FinalizePropertiesTaskExecuter.java:46)在org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)在org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute( java:57)位于org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)位于org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) ... 24更多原因:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:latest.integration的任何匹配项,因为没有可用的com.bar.baz:mapping版本。在以下位置搜索:org.gradle.api.internal.task上的task.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)位于org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)处的SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)... 24以上原因:org.gradle.internal.resolve.ModuleVersionNotFoundException :找不到com.bar.baz:mapping:latest.integration的任何匹配项,因为没有可用的com.bar.baz:mapping版本。在以下位置搜索:org.gradle.api.internal.task上的task.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95)位于org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)处的SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)... 24以上原因:org.gradle.internal.resolve.ModuleVersionNotFoundException :找不到com.bar.baz:mapping:latest.integration的任何匹配项,因为没有可用的com.bar.baz:mapping版本。在以下位置搜索:在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)处执行org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) execute(CatchExceptionTaskExecuter.java:36)...还有24个原因:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:latest.integration的任何匹配项,因为没有com.bar版本.baz:可用映射。在以下位置搜索:在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)处执行org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57) execute(CatchExceptionTaskExecuter.java:36)...还有24个原因:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:latest.integration的任何匹配项,因为没有com.bar版本.baz:可用映射。在以下位置搜索:execute(CatchExceptionTaskExecuter.java:36)...还有24个原因:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:latest.integration的任何匹配项,因为没有com.bar版本.baz:可用映射。在以下位置搜索:execute(CatchExceptionTaskExecuter.java:36)...还有24个原因:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:latest.integration的任何匹配项,因为没有com.bar版本.baz:可用映射。在以下位置搜索:

对于版本0.0.1-SNAPSHOT

  • 异常是:org.gradle.api.tasks.TaskExecutionException:任务':copyTask'的执行失败。在org.org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38)在org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter $ 1.executeTask(EventFiringTaskExecuter.java:73)在org。在org.gradle的gradle.api.internal.tasks.execution.EventFiringTaskExecuter $ 1.call(EventFiringTaskExecuter.java:52)在org.gradle.api.internal.tasks.execution.EventFiringTaskExecuter $ 1.call(EventFiringTaskExecuter.java:49)在org.gradle。位于org.gradle.internal.operations.DefaultBuildOperationExecutor $ CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:的internal.operations.DefaultBuildOperationExecutor $ CallableBuildOperationWorker.execute(DefaultBuildOperationExecutor.java:416)org.gradle.execution.plan.DefaultPlanExecutor $ ExecutorWorker.run(DefaultPlanExecutor.java:129)上的execute.plan.DefaultPlanExecutor $ ExecutorWorker.executeNextNode(DefaultPlanExecutor.java:193)org.gradle.internal.concurrent.ExecutorPolicy $ CatchAndRecordFailures。在org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)上的org.gradle.internal.concurrent.ManagedExecutorImpl $ 1.run(ManagedExecutorImpl.java:46)上的onExecute(ExecutorPolicy.java:63)创建人:org.gradle.api.internal.artifacts.ivyservice.DefaultLenientConfiguration $ ArtifactResolveException:无法解析配置':copyConf'的所有文件。在org.gradle.api.internal.artifacts的org.gradle.api.internal.artifacts.configurations.DefaultConfiguration.rethrowFailure(DefaultConfiguration.java:1195)处。46)在org.gradle.api.internal.tasks.execution.SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)在org.gradle.api.internal.tasks.execution.ResolveTaskExecutionModeExecuter.execute(ResolveTaskExecutionModeExecuter.java:95) .gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)at org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36)... 24个以上的原因创建人:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:0.0.1-SNAPSHOT。在以下位置搜索:在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)处SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)在org.gradle.api.internal.tasks.execution.CatchExceptionTask处CatchExceptionTaskExecuter.java:36)...还有24个原因:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:0.0.1-SNAPSHOT。在以下位置搜索:在org.gradle.api.internal.tasks.execution.SkipOnlyIfTaskExecuter.execute(SkipOnlyIfTaskExecuter.java:56)处SkipTaskWithNoActionsExecuter.execute(SkipTaskWithNoActionsExecuter.java:57)在org.gradle.api.internal.tasks.execution.CatchExceptionTask处CatchExceptionTaskExecuter.java:36)...还有24个原因:org.gradle.internal.resolve.ModuleVersionNotFoundException:找不到com.bar.baz:mapping:0.0.1-SNAPSHOT。在以下位置搜索:ModuleVersionNotFoundException:找不到com.bar.baz:mapping:0.0.1-SNAPSHOT。在以下位置搜索:ModuleVersionNotFoundException:找不到com.bar.baz:mapping:0.0.1-SNAPSHOT。在以下位置搜索:

对于版本0.0.1

  • 异常是:org.gradle.api.tasks.TaskExecutionException:任务':copyTask'的执行失败。在org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:38)...... org.gradle.api.internal.tasks.execution.CatchExceptionTaskExecuter.execute(CatchExceptionTaskExecuter.java:36) ... 24更多原因:org.gradle.internal.resolve.ModuleVersionResolveException:无法解析com.bar.baz:mapping:0.0.1。必需:项目:引起原因:org.gradle.internal.resolve.ModuleVersionResolveException:无法解析com.bar.baz:mapping:0.0.1。造成原因:org.gradle.api.resources.ResourceException:无法获取资源' https://nexus.cluster.regulator.cloud/repository/maven-snapshots/com/bar/baz/mapping/0.0.1/mapping- 0.0.1。磅'。在org.gradle.internal.resource.ResourceExceptions.failure(ResourceExceptions.java:74)
    .... org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run(ThreadFactoryImpl.java:55)原因:org.gradle。 internal.resource.transport.http.HttpErrorStatusCodeException:无法获取' https://nexus.cluster.regulator.cloud/repository/maven-snapshots/com/bar/baz/mapping/0.0.1/mapping-0.0.1。绒球'。从服务器接收到状态代码400:org.gradle.internal.concurrent.ThreadFactoryImpl $ ManagedThreadRunnable.run(org.gradle.internal.

Lou*_*met 3

看起来你正在得到

org.gradle.internal.resource.transport.http.HttpErrorStatusCodeException: Could not GET 'https://nexus.cluster.regulator.cloud/repository/maven-snapshots/com/bar/baz/mapping/0.0.1/mapping-0.0.1.pom'. Received status code 400 from server: Bad Request
Run Code Online (Sandbox Code Playgroud)

鉴于此,最可能的解释是存储库的配置错误。检查为 Maven 设置的身份验证类型,或者检查您的内部组织在接受与 Nexus 实例的连接之前是否有其他检查。

编辑问题后编辑

maven-metadata.xml很明显,Nexus 中的文件与 Gradle 解析的文件不匹配。

从代码中可以看出:

if ("metadata/versioning/snapshot/timestamp".equals(getContext())) {
    mavenMetadata.timestamp = getText();
}
if ("metadata/versioning/snapshot/buildNumber".equals(getContext())) {
    mavenMetadata.buildNumber = getText();
}
if ("metadata/versioning/versions/version".equals(getContext())) {
    mavenMetadata.versions.add(getText().trim());
}
Run Code Online (Sandbox Code Playgroud)

Gradle 只查看节点snapshot而不查看snapshotVersions节点。

那里有两个选择:

  1. 发布另一个快照并查看是否可以解决maven-metadata.xml不一致问题。
  2. 针对 Gradle 提出问题,要求改进对这些极端情况的支持