jbang: Dependency resolving error with custom maven repo, multiple runs and a "--deps" declaration
Describe the bug Calling jbang is failing.
The context:
- We run
./jbang info tools - We have a custom company maven repo
- We use
RELEASEas version definition (to get the latest release)
I think the issue depends of the state of the local maven repo (working on this to be sure)
To Reproduce
The script myJangScript has an custom company repo (which aggregates a maven-central mirror and a company maven repo).
Something like:
//REPOS acme=https://maven.acme.local/maven
We would like to use the latest version of company-lib
Therefore we are passing --deps company.group.id:company-lib:RELEASE.
In some situations (that I am trying to reproduce now), we have this error:
+ ./jbang info tools --verbose --deps company.group.id:company-lib:RELEASE myJangScript
Picked up JAVA_TOOL_OPTIONS: -Dfile.encoding=UTF-8
[jbang] jbang version 0.91.0
[jbang] System Java version detected as 8
[jbang] System Java version matches requested version 8
[jbang] Resolving dependencies...
[jbang] company.group.id:company-lib:jar:RELEASE
[jbang] [ERROR] Could not resolve dependencies from mavencentral=https://repo1.maven.org/maven2/
Unable to collect/resolve dependency tree for a resolution due to: Failed to collect dependencies at company.group.id:company-lib:jar:RELEASE, caused by: Could not find metadata company.group.id:company-lib/maven-metadata.xml in local (/var/lib/jenkins/.m2/repository)
Failed to collect dependencies at company.group.id:company-lib:jar:RELEASE
dev.jbang.cli.ExitException: Could not resolve dependencies from mavencentral=https://repo1.maven.org/maven2/
Unable to collect/resolve dependency tree for a resolution due to: Failed to collect dependencies at company.group.id:company-lib:jar:RELEASE, caused by: Could not find metadata company.group.id:company-lib/maven-metadata.xml in local (/var/lib/jenkins/.m2/repository)
Failed to collect dependencies at company.group.id:company-lib:jar:RELEASE
at dev.jbang.dependencies.DependencyUtil.resolveDependenciesViaAether(DependencyUtil.java:254)
at dev.jbang.dependencies.DependencyUtil.resolveDependencies(DependencyUtil.java:122)
at dev.jbang.dependencies.DependencyUtil.resolveDependencies(DependencyUtil.java:71)
at dev.jbang.dependencies.DependencyResolver.resolve(DependencyResolver.java:67)
at dev.jbang.source.RunContext.resolveClassPath(RunContext.java:354)
at dev.jbang.cli.BaseInfoCommand$ScriptInfo.<init>(Info.java:95)
at dev.jbang.cli.BaseInfoCommand.getInfo(Info.java:163)
at dev.jbang.cli.Tools.doCall(Info.java:186)
at dev.jbang.cli.BaseCommand.call(BaseCommand.java:93)
at dev.jbang.cli.BaseCommand.call(BaseCommand.java:15)
at picocli.CommandLine.executeUserObject(CommandLine.java:1953)
at picocli.CommandLine.access$1300(CommandLine.java:145)
at picocli.CommandLine$RunLast.executeUserObjectOfLastSubcommandWithSameParent(CommandLine.java:2352)
at picocli.CommandLine$RunLast.handle(CommandLine.java:2346)
at dev.jbang.cli.JBang$3.handle(JBang.java:145)
at dev.jbang.cli.JBang$3.handle(JBang.java:140)
at picocli.CommandLine$AbstractParseResultHandler.execute(CommandLine.java:2179)
at picocli.CommandLine.execute(CommandLine.java:2078)
at dev.jbang.Main.main(Main.java:14)
Caused by: org.jboss.shrinkwrap.resolver.api.NoResolvedResultException: Unable to collect/resolve dependency tree for a resolution due to: Failed to collect dependencies at company.group.id:company-lib:jar:RELEASE, caused by: Could not find metadata company.group.id:company-lib/maven-metadata.xml in local (/var/lib/jenkins/.m2/repository)
at org.jboss.shrinkwrap.resolver.impl.maven.MavenWorkingSessionImpl.wrapException(MavenWorkingSessionImpl.java:503)
at org.jboss.shrinkwrap.resolver.impl.maven.MavenWorkingSessionImpl.resolveDependencies(MavenWorkingSessionImpl.java:242)
at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.using(MavenStrategyStageBaseImpl.java:70)
at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.withTransitivity(MavenStrategyStageBaseImpl.java:52)
at org.jboss.shrinkwrap.resolver.impl.maven.MavenStrategyStageBaseImpl.withTransitivity(MavenStrategyStageBaseImpl.java:39)
at dev.jbang.dependencies.DependencyUtil.resolveDependenciesViaAether(DependencyUtil.java:232)
... 18 more
Caused by: org.eclipse.aether.resolution.DependencyResolutionException: Failed to collect dependencies at company.group.id:company-lib:jar:RELEASE
at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:353)
at org.jboss.shrinkwrap.resolver.impl.maven.bootstrap.MavenRepositorySystem.resolveDependencies(MavenRepositorySystem.java:121)
at org.jboss.shrinkwrap.resolver.impl.maven.MavenWorkingSessionImpl.resolveDependencies(MavenWorkingSessionImpl.java:239)
... 22 more
Caused by: org.eclipse.aether.collection.DependencyCollectionException: Failed to collect dependencies at company.group.id:company-lib:jar:RELEASE
at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:291)
at org.eclipse.aether.internal.impl.DefaultRepositorySystem.resolveDependencies(DefaultRepositorySystem.java:309)
... 24 more
Caused by: org.eclipse.aether.resolution.ArtifactDescriptorException: Failed to read artifact descriptor for company.group.id:company-lib:jar:RELEASE
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:218)
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.readArtifactDescriptor(DefaultArtifactDescriptorReader.java:171)
at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.resolveCachedArtifactDescriptor(DefaultDependencyCollector.java:541)
at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.getArtifactDescriptorResult(DefaultDependencyCollector.java:524)
at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:412)
at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.processDependency(DefaultDependencyCollector.java:365)
at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.process(DefaultDependencyCollector.java:352)
at org.eclipse.aether.internal.impl.collect.DefaultDependencyCollector.collectDependencies(DefaultDependencyCollector.java:254)
... 25 more
Caused by: org.eclipse.aether.resolution.VersionResolutionException: Failed to resolve version for company.group.id:company-lib:jar:RELEASE: Could not find metadata company.group.id:company-lib/maven-metadata.xml in local (/var/lib/jenkins/.m2/repository)
at org.apache.maven.repository.internal.DefaultVersionResolver.resolveVersion(DefaultVersionResolver.java:276)
at org.apache.maven.repository.internal.DefaultArtifactDescriptorReader.loadPom(DefaultArtifactDescriptorReader.java:204)
... 32 more
Caused by: org.eclipse.aether.transfer.MetadataNotFoundException: Could not find metadata company.group.id:company-lib/maven-metadata.xml in local (/var/lib/jenkins/.m2/repository)
at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolve(DefaultMetadataResolver.java:220)
at org.eclipse.aether.internal.impl.DefaultMetadataResolver.resolveMetadata(DefaultMetadataResolver.java:181)
at org.apache.maven.repository.internal.DefaultVersionResolver.resolveVersion(DefaultVersionResolver.java:213)
... 33 more
[jbang] If you believe this a bug in jbang, open an issue at https://github.com/jbangdev/jbang/issues
Expected behavior The call works, I will post a example where it works (other Jenkins worker where the local maven repo is not the same)
JBang version 0.91.0
Additional context
First wired thing, this looks really wrong:
[ERROR] Could not resolve dependencies from mavencentral=https://repo1.maven.org/maven2/
For me jbang should use the repo defined in the source.
Is it different if I run ./jbang run vs ./jbang info tools
About this issue
- Original URL
- State: closed
- Created 2 years ago
- Comments: 21 (21 by maintainers)
Commits related to this issue
- fix: fixed problem `--deps` and `//REPOS` If the code had `//REPOS` tags and it would get run with `--deps` on the command line then those deps would not get resolved against the repostories mentione... — committed to quintesse/jbang by quintesse 2 years ago
- fix: fixed problem `--deps` and `//REPOS` If the code had `//REPOS` tags and it would get run with `--deps` on the command line then those deps would not get resolved against the repostories mentione... — committed to quintesse/jbang by quintesse 2 years ago
- fix: fixed problem `--deps` and `//REPOS` (#1296) If the code had `//REPOS` tags and it would get run with `--deps` on the command line then those deps would not get resolved against the repostorie... — committed to jbangdev/jbang by quintesse 2 years ago
Similar issue solved with the same PR https://github.com/jbangdev/jbang/pull/1296
log.javafile:Then
jbang --verbose --deps log4j:log4j:1.2.17 log.java aRun with an other dep:
jbang --verbose --deps ch.qos.reload4j:reload4j:1.2.19 log.java ain the second run
log4j-1.2.17.jarshould not be present. It is just present because of a wrong caching.Running with –fresh is helping
jbang --fresh --verbose --deps ch.qos.reload4j:reload4j:1.2.19 log.java aOr run with the version from branch
quintesse:fix_1292Aha, I actually forgot about this until, trying to find a more limited example, I tried to use
buildinstead ofrunand that shows:So in the second case no build is being performed because
--depson the command line are considered “runtime” dependencies (they’ll be added to the classpath but they won’t be recorded as being part of the application’s dependencies).I’m guessing the problem is that because of this JBang is not even looking at the code and therefore doesn’t take into account the
//REPOStag. And that’s also why clearing the cache or using--freshdoes work because it forces JBang to rebuild which forces it to pick up on the//REPOStag.(Leaving all this information here mostly for my own recollection, don’t worry if you don’t get all of it)