标签: dependency-resolution

Maven 构建失败——DependencyResolutionException

我正在安装一个具有 Maven 依赖项的包,并在尝试清理它时收到 DependencyResolutionException。克隆它后,我导航到该目录并运行以下命令以安装它,没有错误:

mvn install:install-file -Dfile=./lib/massbank.jar -DgroupId=massbank  -DartifactId=massbank -Dversion=1.0 -Dpackaging=jar
mvn install:install-file -Dfile=./lib/metfusion.jar -DgroupId=de.ipbhalle.msbi  -DartifactId=metfusion -Dversion=1.0 -Dpackaging=jar
Run Code Online (Sandbox Code Playgroud)

然后:

mvn clean package 
Run Code Online (Sandbox Code Playgroud)

具有以下控制台输出:

[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------< MassBank2NIST:MassBank2NIST >---------------------
[INFO] Building MassBank2NIST 0.0.2-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  0.450 s
[INFO] Finished at: 2021-04-07T01:08:28-04:00
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project MassBank2NIST: Could not resolve dependencies for project MassBank2NIST:MassBank2NIST:jar:0.0.2-SNAPSHOT: Failed to collect dependencies at edu.ucdavis.fiehnlab.splash:core:jar:1.8: Failed …
Run Code Online (Sandbox Code Playgroud)

pom.xml maven dependency-resolution

45
推荐指数
6
解决办法
3万
查看次数

为什么Gradle或Maven没有依赖项版本锁定文件?

在阅读有关NPM,Yarn,Paket,Cargo等软件包管理器的信息时,我最近被引入了依赖版本锁定文件的概念。我的理解是,它是一个文件,其中列出了所有直接和可传递的依赖关系以及它们的确切含义。版本号,因此可以确保以后的版本使用等效的一组依赖关系。这似乎是一个理想的功能,因为许多程序包管理器已经或正在采用该概念。

我的问题是:

  1. 为什么Maven或Gradle不使用锁定文件?或者,如果这样做,我为什么还没有看到呢?

  2. 在包管理器的依赖关系解决方案策略中允许版本范围与仅允许确切版本相比,其优缺点是什么?

java package-managers gradle maven dependency-resolution

8
推荐指数
2
解决办法
1969
查看次数

为什么 gradle 不在其他 Maven 存储库中搜索依赖项?

为什么 gradle 不在所有定义的 Maven 存储库中搜索依赖项?

回购块定义:

repositories {
    maven {
        name = 'JBoss.org Maven repository'
        url 'https://repository.jboss.org/nexus/content/groups/public'
    }
    maven {
        name = 'spring-milestones'
        url 'http://repo.springsource.org/libs-milestone/'
    }
    mavenCentral()
}
Run Code Online (Sandbox Code Playgroud)

(假设我在子项目中的某个地方net.sf.json-lib:json-lib:2.2.1)我收到:

* What went wrong:
Could not resolve all dependencies for configuration ':myproject:compileClasspath'.
> Could not find json-lib.jar (net.sf.json-lib:json-lib:2.2.1).
  Searched in the following locations:
      http://repo.springsource.org/libs-milestone/net/sf/json-lib/json-lib/2.2.1/json-lib-2.2.1.jar
Run Code Online (Sandbox Code Playgroud)

为什么只有一个搜索位置?该json-lib清楚地存在mavenCentral()

有没有办法对其进行分析或以某种方式进行调试?

PS,如果我mavenCentral()在 repos 列表中向上移动一个位置,我可以解决这个问题,但这将由于相同的原因破坏另一个子项目依赖项解析——来自“spring”repo 的某些东西在mavenCentral().

build-system gradle maven dependency-resolution

7
推荐指数
1
解决办法
3678
查看次数

无法解决:support-compat仅适用于:27.1.1

我有一个带有这个build.gradle文件的android模块:

apply plugin: 'com.android.library'

android {
        compileSdkVersion 27

        defaultConfig {
                minSdkVersion 14
                targetSdkVersion 27
                versionCode 1
                versionName "1.0.0"
        }
}

dependencies {
        implementation 'com.android.support:support-compat:27.1.1'
}
Run Code Online (Sandbox Code Playgroud)

并且在Gradle同步过程中收到此错误:

无法解决:support-compat

我使用的依赖项标识符完全符合https://developer.android.com/topic/libraries/support-library/packages#v4-compat(当我写这个问题时).

有趣的是,问题27.1.1在于版本!我测试的所有其他版本(24.2.0,26.0.0,27.0.0甚至27.1.0)都OK.

此外,我从此版本(27.1.1)测试的所有其他支持库都可以.这里列出了它们:

implementation 'com.android.support:appcompat-v7:27.1.1' 
implementation 'com.android.support:gridlayout-v7:27.1.1'
implementation 'com.android.support:design:27.1.1'
implementation 'com.android.support:support-v4:27.1.1' 
implementation 'com.android.support:cardview-v7:27.1.1'
implementation 'com.android.support:recyclerview-v7:27.1.1'
implementation 'com.android.support:support-annotations:27.1.1'
Run Code Online (Sandbox Code Playgroud)

Screanshot:

在此输入图像描述

如果我在app模块或library模块中插入依赖项没有区别.


我的项目级build.gradle文件:

buildscript {
    repositories {
        jcenter() …
Run Code Online (Sandbox Code Playgroud)

android android-support-library dependency-resolution gradle-dependencies

7
推荐指数
2
解决办法
3645
查看次数

gradle 强制版本的传递依赖不起作用。似乎不适用排除、覆盖或强制

我与传递依赖有冲突。推翻、排除或强迫都无济于事。我还能做什么才能将正确版本的库放入 jar 中?完整的代码是。找到了https://github.com/geoHeil/gradle-dependency-resolution,但其主要部分如下所述。

问题描述

执行

./gradlew shadowJar
Run Code Online (Sandbox Code Playgroud)

禁用 geomesa 依赖项(引入过时版本的 typesafe/lightbend 配置库):

dependencies {

    compile "com.github.kxbmap:configs_2.11:0.4.4"
    //compile "org.locationtech.geomesa:geomesa-hbase-spark-runtime_2.11:2.0.1"
}
Run Code Online (Sandbox Code Playgroud)

并执行 jar

java -jar build/libs/gradleThing-all.jar                         
Run Code Online (Sandbox Code Playgroud)

输出

hello
my config is: Success(Job1Configuration(frequencyCounting))
Run Code Online (Sandbox Code Playgroud)

启用依赖项时:

./gradlew shadowJar
java -jar build/libs/gradleThing-all.jar                         
Run Code Online (Sandbox Code Playgroud)

它失败了

hello
Exception in thread "main" java.lang.Exception: Failed to start. There is a problem with the configuration: Vector([extract] com.typesafe.config.Config.hasPathOrNull(Ljava/lang/String;)Z)
Run Code Online (Sandbox Code Playgroud)

这与配置库的过时版本有关,如何解决类型安全配置上的NoSuchMethodError?。还通过以下方式确认:

gradle dependencyInsight --dependency om.typesafe:config

> Task :dependencyInsight
com.typesafe:config:1.3.1 (conflict resolution)
   variant "runtime" [
      Requested attributes not found in the selected …
Run Code Online (Sandbox Code Playgroud)

gradle transitive-dependency dependency-resolution

6
推荐指数
1
解决办法
1万
查看次数

Maven 找不到依赖项 [dependencyResolutionException]

我在我的项目中添加了一个 Maven 依赖项,我的项目在本地编译,而它不在服务器上编译。它无法解析新添加的依赖项。

这是我的 pom.xml 文件:

    <repositories>
        <repository>
            <id>rep</id>
            <name>Repository</name>
            <url>http://artifacts.com/rep</url>
            <releases>
               <enabled>true</enabled>
               <updatePolicy>always</updatePolicy>
            </releases>
        </repository>
    </repositories>

    <dependencies>
        <dependency>
            <groupId>com.project.rest</groupId>
            <artifactId>common</artifactId>
            <version>2.0.5</version>
        </dependency>
    </dependencies>
Run Code Online (Sandbox Code Playgroud)

这是我的控制台输出错误:

 Downloading: http://artifacts.com/rep/com/project/rest/common/2.0.5/common-2.0.5.pom
    [WARNING] The POM for com.project.rest:common:jar:2.0.5 is missing, no dependency information available

    [INFO] ------------------------------------------------------------------------
    [INFO] BUILD FAILURE
    [INFO] ------------------------------------------------------------------------
    [INFO] Total time: 6.154s
    [INFO] Finished at: Tue Feb 03 06:58:35 BRT 2015
    [INFO] Final Memory: 9M/152M
    [INFO] ------------------------------------------------------------------------
    [ERROR] Failed to execute goal on project server: Could not resolve dependencies for project org.server:
    server:jar:2.5.1-SNAPSHOT: …
Run Code Online (Sandbox Code Playgroud)

pom.xml maven dependency-resolution

5
推荐指数
1
解决办法
4万
查看次数

Gradle如何在我的buildscript块中为SNAPSHOT版本指定cacheResolutionStrategy?

我遇到了ResolutionStrategy.cacheChangingModulesFor的问题.

我的项目build.gradle看起来与此类似

apply plugin: 'base'
apply plugin: 'maven'
apply plugin: 'maven-publish'
apply from: "gradle/mixins/cachestrategy.gradle"
configurations.all {
  resolutionStrategy.cacheDynamicVersionsFor 5, 'minutes'
  resolutionStrategy.cacheChangingModulesFor 0, 'seconds'
}

buildscript {
  repositories {
    maven {
      url artifactoryUrl
    }
  }
  dependencies {
    classpath (group: 'com.myorg', name: 'aCustomPlugin', version: '1.5.0-SNAPSHOT') {
      changing = true
    }
  }
}

allprojects {
  apply plugin: 'base'
  apply plugin: 'com.myorg.aCustomPlugin'
}
Run Code Online (Sandbox Code Playgroud)

我的问题是:如何在我的buildscript块中为SNAPSHOT版本指定cacheResolutionStrategy?

dependencies gradle dependency-resolution

4
推荐指数
1
解决办法
2385
查看次数

如何在 Gradle 中下载和引用单个工件?

我正在创建一个 Gradle 任务,我想在其中下载并引用 Maven 存储库中存在的工件的 jar 文件。具体来说,我计划使用该 jar 的位置作为脚本的参数,通过 Gradle exec任务调用外部脚本。使用 exec 任务很简单;我想弄清楚的是如何在文件系统上获取工件的 jar 文件的位置。

作为一个简单而具体的示例,假设我的 Gradle 项目目录中有以下文件:

构建.gradle:

task myScript(type: Exec) {
    executable './my_script.sh'
    args jarFilePath // How do I get this value?
}
Run Code Online (Sandbox Code Playgroud)

my_script.sh:

#!/usr/bin/env bash
echo "Jar file location: $1"
Run Code Online (Sandbox Code Playgroud)

如何获取工件 jar 的文件路径,并在必要时从远程存储库下载它?例如,如果它不在我的本地工件缓存中,或者它是更新的快照版本,则应该下载它。

dependency-management gradle dependency-resolution

4
推荐指数
1
解决办法
2578
查看次数

spring-framework-bom的netbeans maven web应用程序中的依赖项解析异常:jar:4.0.1.RELEASE

我从Netbeans IDE创建了一个maven Web应用程序,然后从项目属性中添加了spring框架.

然后我建立了这个项目.我收到以下错误.

Failure to find org.springframework:spring-framework-bom:jar:4.0.1.RELEASE in http://repo.maven.apache.org/maven2
Run Code Online (Sandbox Code Playgroud)

构建时得到的输出:

cd /home/shanika/NetBeansProjects/UoMRMSWeb; JAVA_HOME=/opt/jdk /home/shanika/netbeans-8.1/java/maven/bin/mvn clean install
Scanning for projects...

------------------------------------------------------------------------
Building UoMRMSWeb 1.0-SNAPSHOT
------------------------------------------------------------------------
------------------------------------------------------------------------
BUILD FAILURE
------------------------------------------------------------------------
Total time: 0.485s
Finished at: Sat Jun 04 07:57:52 IST 2016
Final Memory: 6M/112M
------------------------------------------------------------------------
Failed to execute goal on project UoMRMSWeb: Could not resolve dependencies for project com.mycompany:UoMRMSWeb:war:1.0-SNAPSHOT: Failure to find org.springframework:spring-framework-bom:jar:4.0.1.RELEASE in http://repo.maven.apache.org/maven2 was cached in the local repository, resolution will not be reattempted until the update interval of …
Run Code Online (Sandbox Code Playgroud)

java spring netbeans maven dependency-resolution

3
推荐指数
1
解决办法
3927
查看次数

Yarn 工作区——包别名

TL;DR 如何为本地纱线工作区依赖项创建别名?

我以前尝试过纱线工作区但从未成功,我将再试一次。

我已经"workspaces": ["packages/*"]入驻package.json

对于每个包,我决定使用命名约定@-/package-name来防止命名冲突,并且不用担心内部包的命名空间。

当添加包作为依赖项时,我一直遵循一种风格,即使用接口名称进行解析,但将其指向具体的实现。这是我在使用纱线工作区之前所做的:

"dependencies": {
  "my-interface-name": "file:some/path/to/packages/some-concrete-implementation"
}
Run Code Online (Sandbox Code Playgroud)

这基本上是为了允许我所说的编译时静态依赖注入。这也意味着每个包都可以根据自己的需要单独命名其接口依赖项,并防止命名冲突。

但是,我不知道如何使用纱线工作区来完成此任务。如何为我的纱线工作区包创建一个名为 的@-/some-concrete-implementation别名my-interface-name

我已经尝试过但没有成功:

  • 定义依赖关系,例如"my-interface-name": "@-/some-concrete-implementation"}- 由于某种原因,这会导致yarn在npm注册表中查找@-/some-concrete-implementation而不是在本地工作区中查找
  • 我也尝试过使用工作区协议:"my-interface-name": "workspace:@-/some-concrete-implementation"}但它仍然在 npm 注册表上查找包!

我还没有尝试过并且可以工作,但首先消除了使用纱线工作区的好处:

  • "dependencies": {"my-interface-name": "file:../../node_modules/@-/some-concrete-implementation"}"

node.js npm dependency-resolution yarnpkg yarn-workspaces

3
推荐指数
1
解决办法
9086
查看次数