Skip to content

Conversation

mattnworb
Copy link
Contributor

@mattnworb mattnworb commented May 13, 2024

Coursier fails with a cryptic error in case someone tries to use maven_install() without specifying any repositories, which is a small silly thing I did when trying to extract internal corporate code into a public proof-of-concept on how to do something with Bazel that took me 10 minutes to hunt down :)

When repositories is empty, Coursier fails with an error like:

  Dependencies:
org.junit.jupiter:junit-jupiter-engine:5.10.2:
Resolution error: Error downloading org.junit.jupiter:junit-jupiter-engine:5.10.2

this was for a maven_install() block with a single artifact to install; otherwise the error message will contain one Resolution error per artifact. The problem though is that Coursier doesn't say what the error is, just that one occurred.

The root-cause is that coursier_fetch etc will invoke coursier with arguments like

coursier fetch <artifacts> ... --no-default ...

which disables default repositories like Maven Central.

So as a simple fix to prevent people from configuring maven_install in a way that doesn't make sense like I did, this commit adds a check inside make_coursier_dep_tree (where the arguments to coursier are constructed) to fail if the list/dict of repositories is empty.

@jin
Copy link
Collaborator

jin commented May 15, 2024

I'm surprised that we took this long to encounter this failure mode... thanks!

Could you rebase?

Coursier fails with a cryptic error in case someone tries to use
`maven_install()` without specifying any `repositories`, which is a
small silly thing I did when trying to extract internal corporate code
into a public proof-of-concept on how to do something with Bazel that
took me 10 minutes to hunt down :)

When `repositories` is empty, Coursier fails with an error like:

```
  Dependencies:
org.junit.jupiter:junit-jupiter-engine:5.10.2:
Resolution error: Error downloading org.junit.jupiter:junit-jupiter-engine:5.10.2
```

this was for a `maven_install()` block with a single artifact to install;
otherwise the error message will contain one `Resolution error` per artifact.
The problem though is that Coursier doesn't say what the error is, just that
one occurred.

The root-cause is that `coursier_fetch` etc will invoke coursier with arguments like

```
coursier fetch <artifacts> ... --no-default ...
```

So as a simple fix to prevent people from configuring `maven_install` in a way
that doesn't make sense like I did, this commit adds a check inside
`make_coursier_dep_tree` (where the arguments to coursier are constructed) to
fail if the list/dict of repositories is empty.
@mattnworb mattnworb force-pushed the check-repositories-length branch from 5d9b3c5 to b8fdc37 Compare May 15, 2024 13:41
@mattnworb
Copy link
Contributor Author

@jin done, thanks!

@jin jin merged commit 14597e3 into bazel-contrib:master May 15, 2024
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
None yet
Projects
None yet
Development

Successfully merging this pull request may close these issues.

2 participants