我正在安装一个具有 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) 在阅读有关NPM,Yarn,Paket,Cargo等软件包管理器的信息时,我最近被引入了依赖版本锁定文件的概念。我的理解是,它是一个文件,其中列出了所有直接和可传递的依赖关系以及它们的确切含义。版本号,因此可以确保以后的版本使用等效的一组依赖关系。这似乎是一个理想的功能,因为许多程序包管理器已经或正在采用该概念。
我的问题是:
为什么Maven或Gradle不使用锁定文件?或者,如果这样做,我为什么还没有看到呢?
在包管理器的依赖关系解决方案策略中允许版本范围与仅允许确切版本相比,其优缺点是什么?
为什么 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.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
我与传递依赖有冲突。推翻、排除或强迫都无济于事。我还能做什么才能将正确版本的库放入 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) 我在我的项目中添加了一个 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) 我遇到了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?
我正在创建一个 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 的文件路径,并在必要时从远程存储库下载它?例如,如果它不在我的本地工件缓存中,或者它是更新的快照版本,则应该下载它。
我从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) 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"}"