Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Update Report Using Coursier Does Not Provide License Information of Dependency Packages #1790

Open
raphaelNguyen opened this issue Jul 7, 2020 · 4 comments

Comments

@raphaelNguyen
Copy link

steps

sbt version: 1.3.13
build.sbt:

lazy val sample = (project in file("."))
  .settings(
    name := "sbt-sample",
    organization := "sample",
    version := "0.1.0",
    scalaVersion := "2.12.11"
  )

problem

With Coursier, the task updateFull does not seem to provide the license information of the dependency packages. This does not seem like the correct behaviour. Output with Coursier is as follow:

[info] Update report:
[info] 	Resolve time: -1 ms, Download time: -1 ms, Download size: -1 bytes
[info] 	plugin:
[info] 	pom:
[info] 	test:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	provided:
[info] 	compile-internal:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	docs:
[info] 	optional:
[info] 	compile:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	test-internal:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	scala-tool:
[info] 	org.scala-lang:scala-compiler
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: org.scala-lang:scala-compiler:2.12.11, org.scala-lang:scala-reflect:2.12.11, sample:sbt-sample_2.12:0.1.0
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: org.scala-lang:scala-compiler:2.12.11, org.scala-lang:scala-reflect:2.12.11, sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	org.scala-lang.modules:scala-xml_2.12
[info] 		- 1.0.6
[info] 			evicted: false
[info] 			homepage: http://www.scala-lang.org/
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: org.scala-lang:scala-compiler:2.12.11
[info] 
[info] 	org.scala-lang:scala-reflect
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: org.scala-lang:scala-compiler:2.12.11
[info] 
[info] 	org.fusesource.jansi:jansi
[info] 		- 1.12
[info] 			evicted: false
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: org.scala-lang:scala-compiler:2.12.11
[info] 
[info] 	jline:jline
[info] 		- 2.14.6
[info] 			evicted: false
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: org.scala-lang:scala-compiler:2.12.11
[info] 
[info] 	sources:
[info] 	runtime:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	runtime-internal:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			configurations: test, optional, compile, default, runtime
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[success] Total time: 0 s, completed 7 Jul 2020, 11:26:22

expectation

Using Ivy resolution on the same project, updateFull provides much more information. Output with Ivy is as follow:

[info] Update report:
[info] 	Resolve time: 185 ms, Download time: 47 ms, Download size: 0 bytes
[info] 	compile:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			status: release
[info] 			publicationDate: 2020-03-16T20:35:32+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			isDefault: false
[info] 			configurations: default, compile, runtime, default(compile), master
[info] 			licenses: (Apache-2.0,Some(https://www.apache.org/licenses/LICENSE-2.0))
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	runtime:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			status: release
[info] 			publicationDate: 2020-03-16T20:35:32+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			isDefault: false
[info] 			configurations: default, compile, runtime, default(compile), master
[info] 			licenses: (Apache-2.0,Some(https://www.apache.org/licenses/LICENSE-2.0))
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	test:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			status: release
[info] 			publicationDate: 2020-03-16T20:35:32+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			isDefault: false
[info] 			configurations: default, compile, runtime, default(compile), master
[info] 			licenses: (Apache-2.0,Some(https://www.apache.org/licenses/LICENSE-2.0))
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	provided:
[info] 	optional:
[info] 	compile-internal:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			status: release
[info] 			publicationDate: 2020-03-16T20:35:32+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			isDefault: false
[info] 			configurations: default, compile, runtime, default(compile), master
[info] 			licenses: (Apache-2.0,Some(https://www.apache.org/licenses/LICENSE-2.0))
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	runtime-internal:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			status: release
[info] 			publicationDate: 2020-03-16T20:35:32+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			isDefault: false
[info] 			configurations: default, compile, runtime, default(compile), master
[info] 			licenses: (Apache-2.0,Some(https://www.apache.org/licenses/LICENSE-2.0))
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	test-internal:
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			status: release
[info] 			publicationDate: 2020-03-16T20:35:32+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			isDefault: false
[info] 			configurations: default, compile, runtime, default(compile), master
[info] 			licenses: (Apache-2.0,Some(https://www.apache.org/licenses/LICENSE-2.0))
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	plugin:
[info] 	pom:
[info] 	scala-tool:
[info] 	org.scala-lang:scala-compiler
[info] 		- 2.12.11
[info] 			status: release
[info] 			publicationDate: 2020-03-16T20:37:31+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			isDefault: false
[info] 			configurations: default, compile, runtime, optional, optional(default), master
[info] 			licenses: (Apache-2.0,Some(https://www.apache.org/licenses/LICENSE-2.0))
[info] 			callers: sample:sbt-sample_2.12:0.1.0
[info] 
[info] 	org.fusesource.jansi:jansi
[info] 		- 1.12
[info] 			status: release
[info] 			publicationDate: 2016-04-28T02:41:11+10:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			isDefault: false
[info] 			configurations: compile, master(compile), compile(*), master
[info] 			licenses: (The Apache Software License, Version 2.0,Some(http://www.apache.org/licenses/LICENSE-2.0.txt))
[info] 			callers: org.scala-lang:scala-compiler:2.12.11
[info] 
[info] 	jline:jline
[info] 		- 2.14.6
[info] 			status: release
[info] 			publicationDate: 2018-03-26T20:18:40+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			isDefault: false
[info] 			configurations: compile, master(compile), compile(*), master
[info] 			licenses: (The BSD License,Some(http://www.opensource.org/licenses/bsd-license.php))
[info] 			callers: org.scala-lang:scala-compiler:2.12.11
[info] 
[info] 	org.scala-lang.modules:scala-xml_2.12
[info] 		- 1.0.6
[info] 			status: release
[info] 			publicationDate: 2016-11-02T01:21:05+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: http://www.scala-lang.org/
[info] 			isDefault: false
[info] 			configurations: compile, runtime(*), master(compile), runtime, compile(*), master
[info] 			licenses: (BSD 3-clause,Some(http://opensource.org/licenses/BSD-3-Clause))
[info] 			callers: org.scala-lang:scala-compiler:2.12.11
[info] 
[info] 	org.scala-lang:scala-reflect
[info] 		- 2.12.11
[info] 			status: release
[info] 			publicationDate: 2020-03-16T20:32:03+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			isDefault: false
[info] 			configurations: compile, runtime(*), master(compile), runtime, compile(*), master
[info] 			licenses: (Apache-2.0,Some(https://www.apache.org/licenses/LICENSE-2.0))
[info] 			callers: org.scala-lang:scala-compiler:2.12.11
[info] 
[info] 	org.scala-lang:scala-library
[info] 		- 2.12.11
[info] 			status: release
[info] 			publicationDate: 2020-03-16T20:35:32+11:00
[info] 			resolver: sbt-chain
[info] 			artifactResolver: sbt-chain
[info] 			evicted: false
[info] 			homepage: https://www.scala-lang.org/
[info] 			extraAttributes: Map(info.apiURL -> https://www.scala-lang.org/api/2.12.11/)
[info] 			isDefault: false
[info] 			configurations: default, compile, runtime(*), master(compile), runtime, optional, optional(default), compile(*), master
[info] 			licenses: (Apache-2.0,Some(https://www.apache.org/licenses/LICENSE-2.0))
[info] 			callers: org.scala-lang:scala-reflect:2.12.11 (), sample:sbt-sample_2.12:0.1.0, org.scala-lang:scala-compiler:2.12.11
[info] 
[success] Total time: 0 s, completed 7 Jul 2020, 11:26:53

notes

This issue was originally reported at sbt/sbt#5670

@bollwyvl
Copy link

bollwyvl commented Dec 6, 2020

For downstreams wishing to package coursier things (including coursier itself!), this would be very useful!

@Philippus
Copy link

I think this was solved in #1827. Note that some still don't have a license, because I think coursier relies on the pom file for it, which does not always contain the license information.

@mdedetrich
Copy link
Contributor

I think this was solved in #1827. Note that some still don't have a license, because I think coursier relies on the pom file for it, which does not always contain the license information.

This wasn't resolved completely, I am still experiencing this issue. I am currently working on an improvement in sbt-license-report which is to use DependencyResolver with the Ivy#Module module instead of calling Ivy#Module directly and if DependencyResolution uses coursier it fails to get the license information however with Ivy it works

@mdedetrich
Copy link
Contributor

So I managed to confirm that the core XML parser in coursier is indeed working as expected (see #2842).

My current hypothesis is that the licenses field might be propagated from some parent ivy xml which is why its missing in certain dependencies. I am still trying to get my head around how ivy works exactly but I can confirm its not a basic XML parsing issue.

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

No branches or pull requests

4 participants