@Stuart @Sam  https://github.com/google/guice/pull/1553

This adds creation of `guice-X.X.X-shadedasmguava.jar` with both asm and guava 
shaded. I've chosen `shadedasmguava` instead of just `shaded` as the latter by 
convention means that *all* deps are shaded, which is not the case: please let 
me know if you are ok with this.
I've tested both `guice-5.0.2-SNAPSHOT.jar` and 
`guice-5.0.2-SNAPSHOT-shadedasmguava.jar` with some of my projects and they 
seem to work correctly.

btw, I think the current naming scheme of other jars is very confusing:
guice-X.X.X.jar  -> asm shaded
guice-X.X.X-classes.jar  -> nothing shaded

I think in the future we should make classifiers self-explanatory:
guice-X.X.X.jar  -> nothing shaded
guice-X.X.X-shadedasm.jar  -> asm shaded
guice-X.X.X-shadedasmguava.jar  -> asm and guava shaded

Cheers!



On 10/12/2021 01:24, Piotr Morgwai Kotarbinski wrote:
> Just to make sure: so the current possibility of turning off  ASM shading (by 
> deactivating guice.with.jarjar profile)  is not used by anyone?
> 
> @Stuart, thanks for pointing!
> 
> @Sam, exactly: that's what that was supposed to mean.
> 
> Thanks!
> 
> On Friday, December 10, 2021 at 1:08:46 AM UTC+7 Sam Berlin wrote:
> 
>     I think I agree on variant (3), but I just want to be clear on what "no 
> profiles" means.  Maven users depending on Guice will get the "with ASM 
> shaded" version [same as today], and can opt-in to swapping that out for the 
> "with ASM & Guava shaded" version with some "simple" Maven incantations?
> 
>     sam
> 
>     On Thu, Dec 9, 2021 at 1:05 PM Stuart McCulloch <mcc...@gmail.com> wrote:
> 
>         IMHO for the next release it should be variant 3: no profiles:
> 
>             guice-5.0.2.jar -> with ASM shaded (or jarjar'd)
>             guice-5.0.2-shaded.jar -> with ASM and Guava shaded
> 
>         Note the build already produces a jar that has nothing shaded:
> 
>             guice-5.0.2-classes.jar
> 
>         (see https://repo1.maven.org/maven2/com/google/inject/guice/5.0.1)
> 
>         On Thu, 9 Dec 2021 at 17:58, Piotr Morgwai Kotarbinski 
> <mor...@gmail.com> wrote:
> 
>             now I'm a bit confused what should be the final output ;-)
> 
>             variant 1: no profiles
>                 guice-5.0.2.jar  -> without anything shaded
>                 guice-5.0.2-shaded.jar -> with ASM and Guava shaded
> 
>             variant 2: 2 profiles:
>             default profile:
>                 guice-5.0.2.jar -> without anything shaded
>             to-be-deployed-to-maven-central-profile:
>                 guice-5.0.2.jar -> with ASM shaded
>                 guice-5.0.2-shaded.jar -> with ASM and Guava shaded
> 
>             variant 3: no profiles:
>                 guice-5.0.2.jar -> with ASM shaded
>                 guice-5.0.2-shaded.jar -> with ASM and Guava shaded
> 
>             ...or something even else?
> 
>             On Thursday, December 9, 2021 at 11:53:34 PM UTC+7 Sam Berlin 
> wrote:
> 
>                 I thought we had stopped shading ASM, guess I was wrong.  I'm 
> OK switching fully to shade and dropping jarjar, assuming it works as well or 
> better.
> 
>                 Let's give the shaded one a generic "deps-are-shaded"-like 
> name, so that maybe in the future we can drop the ASM shading and tell folks 
> to use the shaded-deps version if they want all the deps self-contained.
> 
>                 sam
> 
>                 On Thu, Dec 9, 2021 at 10:29 AM Piotr Morgwai Kotarbinski 
> <mor...@gmail.com> wrote:
> 
>                     @Sam
>                     adding the below to build plugins in pom.xml
> 
>                             <plugin>
>                                     
> <groupId>org.apache.maven.plugins</groupId>
>                                     
> <artifactId>maven-shade-plugin</artifactId>
>                                     <executions>
>                                             <execution>
>                                                     <phase>package</phase>
>                                                     <goals>
>                                                             <goal>shade</goal>
>                                                     </goals>
>                                                     <configuration>
>                                                             <artifactSet>
>                                                                     <includes>
>                                                                             
> <include>com.google.guava:guava</include>
>                                                                     
> </includes>
>                                                             </artifactSet>
>                                                             <relocations>
>                                                                     
> <relocation>
>                                                                             
> <pattern>com.google.common</pattern>
>                                                                             
> <shadedPattern>com.google.inject.shadedcommon</shadedPattern>
>                                                                     
> </relocation>
>                                                             </relocations>
>                                                             
> <shadedArtifactAttached>true</shadedArtifactAttached>
>                                                             
> <shadedClassifierName>shadedguava</shadedClassifierName>
>                                                             
> <minimizeJar>true</minimizeJar>
>                                                     </configuration>
>                                             </execution>
>                                     </executions>
>                             </plugin>
> 
>                     should result in an additional jar being produced named 
> guice-5.0.2-shadedguava.jar that will include all Guava classes that Guice 
> depends on relocated to com.google.inject.shadedcommon package (excluding 
> Guava classes not used by Guice and excluding any other dependencies).
>                     Meanwhile guice-5.0.2.jar will not be affected in anyway.
> 
>                     Later on projects using Guice will be able to do 1 of the 
> below:
>                     - depend on standard build of Guice that has transitive 
> compile dependency on Guava that will be included in war/uber-jar:
> 
>                             <dependencies>
>                                     <dependency>
>                                             
> <groupId>com.google.inject</groupId>
>                                             <artifactId>guice</artifactId>
>                                             <version>5.0.2</version>
>                                     </dependency>
>                                     <!-- other deps here -->
>                             </dependencies>
> 
>                     - depend on -shadedguava build that includes relocated 
> Guava classes and exclude dependency on full stand-alone Guava:
> 
>                             <dependencies>
>                                     <dependency>
>                                             
> <groupId>com.google.inject</groupId>
>                                             <artifactId>guice</artifactId>
>                                             <version>5.0.2</version>
>                                             
> <classifier>shadedguava</classifier>
>                                             <exclusions>
>                                                     <exclusion>
>                                                             
> <groupId>com.google.guava</groupId>
>                                                             
> <artifactId>guava</artifactId>
>                                                     </exclusion>
>                                             </exclusions>
>                                     </dependency>
>                                     <!-- other deps here -->
>                             </dependencies>
> 
>                     I will try to prepare a PR with this. The only potential 
> problem I see is that Guice already uses JarJar plugin to shade ASM and I'm 
> not sure if they will not conflict with each other. As I understand jars 
> deployed to maven-central are build using guice.with.jarjar profile, correct? 
> In case of conflicts between JarJar and maven-shade-plugin would it be 
> acceptable to use maven-shade-plugin for shading ASM as well instead of 
> JarJar?
> 
>                     Thanks!
> 
>                     On Thursday, December 9, 2021 at 9:03:22 PM UTC+7 Sam 
> Berlin wrote:
> 
>                         I don't think we want to remove the ability to have a 
> non-shaded Guava (and have that as the default), but if it's possible to 
> build both at once, and if Maven supports a way of saying: "Hey, every time 
> my dependency tree depends of Guice, instead use this <other Guava-shaded 
> version of it>", I see no particular problem with that.
> 
>                         Assuming both are possible and unless Stuart or 
> someone else has a strong reason why allowing this is a bad idea, I'd be 
> happy to accept a PR for it.
> 
>                         Note that I wouldn't want to do this for *all* the 
> dependencies. We don't want to get back into the habit of needing to 
> rerelease Guice whenever a dependency has a new version, even if that version 
> is backwards compatible. This is particularly true for ASM.
> 
>                         sam
> 
> 
>                         On Thu, Dec 9, 2021, 8:54 AM Piotr Morgwai 
> Kotarbinski <mor...@gmail.com> wrote:
> 
>                             Hi,
>                             I don't exactly understand what you mean by 
> "anyone who wants to shade in Guava can still do that". If you mean "anyone 
> can make their own build of Guice", then it's quite a burden: you need to 
> maintain a private maven repo only for this modified build of Guice for 
> lifetime (at least for the lifetime of your project), rebuild it each time a 
> new upstream Guice version is released etc...
>                             If you have something else in mind, then please 
> kindly elaborate when you have a moment: maybe I'm missing some nice and easy 
> solution ;-)
> 
>                             OTOH, maven-shade-plugin also has 
> `shadedArtifactAttached` and `shadedClassifierName` flags which allow to 
> build and deploy both jars at once (with and without 
> shaded+relocated+minimized Guava). This way it would be easy for everyone, 
> right?
> 
>                             Cheers!
> 
>                             On Thursday, December 9, 2021 at 7:43:43 PM UTC+7 
> mcc...@gmail.com wrote:
> 
>                                 You'll find that while it saves some space it 
> will still pull in a lot of Guava, which is the main reason why Guice stopped 
> shading it in for everyone.
> 
>                                 With the current setup anyone who wants to 
> shade in Guava can still do that, while everyone else is free to use a common 
> Guava library without the bloat.
> 
>                                 One compromise could be to add a "guice-all" 
> module to the build which puts Guice and its implementation dependencies into 
> an uber jar.
> 
>                                 (Although if there's a security issue in the 
> version of Guava shaded in then you'd then need to wait for a new release of 
> Guice vs. shading it yourself.)
> 
> 
>                                 On Thu, 9 Dec 2021 at 12:04, Piotr Morgwai 
> Kotarbinski <mor...@gmail.com> wrote:
> 
>                                     hmm, it's just come to me that maybe it's 
> possible to achieve the same result without a need for guice-guava, using 
> only maven-shade-plugin's filters and  "minimizeJar" option: in theory it 
> should exactly include only classes that the project actually uses: 
> https://maven.apache.org/plugins/maven-shade-plugin/shade-mojo.html#minimizeJar
>                                     (which makes me wonder why wasn't it used 
> in the first place back when Guava was shaded...)
> 
>                                     On Thursday, December 9, 2021 at 2:10:57 
> PM UTC+7 Piotr Morgwai Kotarbinski wrote:
> 
>                                         Unfortunately I think that the part 
> "get the PR accepted"  is the main blocker here: I doubt google would be 
> interested in such change: internally they build everything from HEAD of each 
> dependency each time (or at least they used to), so versioning is not an 
> issue for them. On top of this, they use Guice for almost every piece of Java 
> code (again, at least they used to), so I'm afraid they will view any change 
> that does not solve some of *their* problems as an unnecessary risk. On top 
> of on top of this add general unresponsiveness of google to issues and PRs on 
> Guice github repo, so even just starting a discussion what could possibly be 
> an acceptable solution from google's point of view may turn impossible.
>                                         As a consequence, anyone undertaking 
> such task will risk all of his work to never be accepted (or even considered) 
> due to these "political" reasons regardless of his solution's quality and 
> usefulness for non-google users :(
> 
>                                         At least for the sake of this 
> conversation, let's try to discuss possible approaches nevertheless:
>                                         - duplicating Guava's functionality 
> directly into Guice is an ugly solution, introduces maintenance problems and 
> IMO should NOT be ever accepted.
>                                         - putting Guava's functionality 
> required by Guice into a separate lib (let's call it "guice-guava") and 
> creating in Guice's pom an additional profile that uses this lib (shaded and 
> relocated) instead of Guava: this way Guice code stays pure, but this new lib 
> has exactly the same problems as described in the previous point.
>                                         - creating guice-guava by including 
> Guava as its submodule and linking from `src/main/java` to a subset of java 
> files in guice-guava submodule folder (hence including only necessary classes 
> in guice-guava) may be reasonable solution. Whether it's actually feasible 
> depends how deep is the dependency graph of Guava classes required by Guice.
> 
>                                         Cheers!
> 
>                                         On Friday, December 3, 2021 at 
> 3:31:40 AM UTC+7 Brian Pontarelli wrote:
> 
>                                             I agree 100%. 
> 
>                                             My offer of a bounty still 
> stands. Seriously. Happy to discuss actual numbers, but it would definitely 
> be worth it for us to pay a good rate to get this fixed. FusionAuth would be 
> the corporate sponsor of this effort in case anyone is interested.
> 
>                                             — Brian
> 
>>                                             On Nov 19, 2021, at 1:35 PM, 
>> Piotr Morgwai Kotarbinski <mor...@gmail.com> wrote:
>>
>>                                             IMO, if a lib breaks backwards 
>> compatibility so often as Guava, it must be shaded: otherwise conflicts are 
>> unavoidable. The real problem is that Guava is too big as mentioned before. 
>> The right solution IMO would be to split it to smaller sub-libs. This way 
>> shading a small part that Guice depends on, would not be a problem anymore.
>>
>>                                             Cheers!
>>
>>                                             On Monday, April 5, 2021 at 
>> 9:43:26 PM UTC+7 Brian Pontarelli wrote:
>>
>>                                                 I understand why it would be 
>> best to leave Guava out of shading, but it really causes issues because of 
>> the way that Guava manages releases and versioning. The fact that it is on 
>> major version 27 while many projects are using version 10 is an issue. Every 
>> time a library upgrades Guava, we are all just hoping that it doesn’t break 
>> out entire classpath at runtime due to some incompatible change. And 
>> manually shading everything in our classpath for every upgrade is not 
>> feasible (hence the reason we are removing Guava deps whenever possible).
>>
>>                                                 I’d be willing to provide a 
>> bounty if someone is willing to remove Guava completely and can get the PR 
>> accepted.
>>
>>                                                 — Brian
>>
>>>                                                 On Mar 14, 2021, at 4:57 
>>> PM, Stuart McCulloch <mcc...@gmail.com> wrote:
>>>
>>>
>>>                                                 On Fri, 19 Feb 2021 at 
>>> 18:44, Brian Pontarelli <br...@pontarelli.com> wrote:
>>>
>>>                                                     I’d be interested in 
>>> this as well since we will be upgrading to Java 17 for FusionAuth once it 
>>> is released.
>>>
>>>                                                     And not to hijack, but 
>>> will it be possible to remove Guava and all shaded deps?
>>>
>>>                                                  
>>>                                                 In the latest release 
>>> (5.0.1) the CGLIB dependency has been removed leaving ASM as the only 
>>> shaded dependency - because it's shaded it shouldn't conflict with other 
>>> versions on your classpath.
>>>
>>>                                                 Guava used to be shaded as 
>>> well, but this caused overhead for users who were also using Guava 
>>> elsewhere in their application. It also made it harder to pick up Guava 
>>> fixes in-between releases of Guice. So it's now a direct dependency that 
>>> people can decide to shade themselves if they want to use different 
>>> versions on their classpath.
>>>
>>>                                                 Removing Guava completely 
>>> would be a big undertaking - it's not part of the public API, but the 
>>> internals use it for caches and multimap support.
>>>
>>>                                                     Guava is a great 
>>> example of how not to manage a library and it keeps rolling major versions 
>>> that break compatibility. Tons of libraries uses different versions and 
>>> regularly break our classpath. We are slowly yanking libraries in 
>>> FusionAuth that use CGLIB, ASM, and Guava. It would be awesome if Guice 
>>> could yank those deps. Ideally, Guice would have no deps (except 
>>> javax.inject) and just be a drop in lib.
>>>
>>>                                                     — Brian
>>>
>>>>                                                     On Feb 19, 2021, at 
>>>> 11:05 AM, Peter Burka <pe...@quux.net> wrote:
>>>>
>>>>                                                     Java 17 will be 
>>>> released later this year, and will be the first long term support (LTS) 
>>>> OpenJDK version since Java 11 in 2018. I imagine that Guice 5 will add 
>>>> support for Java 17, however the current beta version does not work on 
>>>> Java 17 early-access as it includes an out-of-date shaded version of ASM.
>>>>
>>>>                                                     What is the 
>>>> anticipated schedule for releasing Guice 5? Will it be available before 
>>>> Java 17? Will there be any additional beta releases before GA?
>>>>
>>>>                                                     Are there any plans to 
>>>> update Guice 4 with Java 17 support, too?
>>>>
>>>>                                                     Thank you!
>>>>
>>>>
>>>>                                                     -- 
>>>>                                                     You received this 
>>>> message because you are subscribed to the Google Groups "google-guice" 
>>>> group.
>>>>                                                     To unsubscribe from 
>>>> this group and stop receiving emails from it, send an email to 
>>>> google-guice...@googlegroups.com.
>>>>                                                     To view this 
>>>> discussion on the web visit 
>>>> https://groups.google.com/d/msgid/google-guice/88f24d78-f0b0-4633-881b-44deb050610fn%40googlegroups.com
>>>>  
>>>> <https://groups.google.com/d/msgid/google-guice/88f24d78-f0b0-4633-881b-44deb050610fn%40googlegroups.com?utm_medium=email&utm_source=footer>.
>>>
>>>
>>>                                                     -- 
>>>                                                     You received this 
>>> message because you are subscribed to the Google Groups "google-guice" 
>>> group.
>>>                                                     To unsubscribe from 
>>> this group and stop receiving emails from it, send an email to 
>>> google-guice...@googlegroups.com.
>>>                                                     To view this discussion 
>>> on the web visit 
>>> https://groups.google.com/d/msgid/google-guice/AF183807-C0A0-4C3B-8C23-6B93F89D4BA9%40pontarelli.com
>>>  
>>> <https://groups.google.com/d/msgid/google-guice/AF183807-C0A0-4C3B-8C23-6B93F89D4BA9%40pontarelli.com?utm_medium=email&utm_source=footer>.
>>>
>>>
>>>                                                 -- 
>>>                                                 You received this message 
>>> because you are subscribed to the Google Groups "google-guice" group.
>>>                                                 To unsubscribe from this 
>>> group and stop receiving emails from it, send an email to 
>>> google-guice...@googlegroups.com.
>>>                                                 To view this discussion on 
>>> the web visit 
>>> https://groups.google.com/d/msgid/google-guice/CAMr6Z4%3DLAU4QDiH_gvJ%2BtMm1SpWDhdpPcZ6GB3oqm%3Dnm%2Bc%2BtNQ%40mail.gmail.com
>>>  
>>> <https://groups.google.com/d/msgid/google-guice/CAMr6Z4%3DLAU4QDiH_gvJ%2BtMm1SpWDhdpPcZ6GB3oqm%3Dnm%2Bc%2BtNQ%40mail.gmail.com?utm_medium=email&utm_source=footer>.
>>
>>
>>                                             -- 
>>                                             You received this message 
>> because you are subscribed to the Google Groups "google-guice" group.
>>                                             To unsubscribe from this group 
>> and stop receiving emails from it, send an email to 
>> google-guice...@googlegroups.com.
>>                                             To view this discussion on the 
>> web visit 
>> https://groups.google.com/d/msgid/google-guice/1eb953bf-675b-4d09-8dea-00c38db8a7f4n%40googlegroups.com
>>  
>> <https://groups.google.com/d/msgid/google-guice/1eb953bf-675b-4d09-8dea-00c38db8a7f4n%40googlegroups.com?utm_medium=email&utm_source=footer>.
> 
>                                     -- 
>                                     You received this message because you are 
> subscribed to the Google Groups "google-guice" group.
>                                     To unsubscribe from this group and stop 
> receiving emails from it, send an email to google-guice...@googlegroups.com.
> 
>                                     To view this discussion on the web visit 
> https://groups.google.com/d/msgid/google-guice/ee3eea18-a9ea-4a21-9ff8-8d2a496e511en%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/google-guice/ee3eea18-a9ea-4a21-9ff8-8d2a496e511en%40googlegroups.com?utm_medium=email&utm_source=footer>.
> 
>                             -- 
>                             You received this message because you are 
> subscribed to the Google Groups "google-guice" group.
>                             To unsubscribe from this group and stop receiving 
> emails from it, send an email to google-guice...@googlegroups.com.
> 
>                             To view this discussion on the web visit 
> https://groups.google.com/d/msgid/google-guice/8717c4c2-7c53-47af-aee1-012b788b5d6an%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/google-guice/8717c4c2-7c53-47af-aee1-012b788b5d6an%40googlegroups.com?utm_medium=email&utm_source=footer>.
> 
>                     -- 
>                     You received this message because you are subscribed to 
> the Google Groups "google-guice" group.
>                     To unsubscribe from this group and stop receiving emails 
> from it, send an email to google-guice...@googlegroups.com.
> 
>                     To view this discussion on the web visit 
> https://groups.google.com/d/msgid/google-guice/9829d05d-e453-4740-b643-2686f7b71635n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/google-guice/9829d05d-e453-4740-b643-2686f7b71635n%40googlegroups.com?utm_medium=email&utm_source=footer>.
> 
>             -- 
>             You received this message because you are subscribed to the 
> Google Groups "google-guice" group.
>             To unsubscribe from this group and stop receiving emails from it, 
> send an email to google-guice...@googlegroups.com.
>             To view this discussion on the web visit 
> https://groups.google.com/d/msgid/google-guice/91ee31b1-b4f5-44fb-ad04-2c103bf13613n%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/google-guice/91ee31b1-b4f5-44fb-ad04-2c103bf13613n%40googlegroups.com?utm_medium=email&utm_source=footer>.
> 
>         -- 
>         You received this message because you are subscribed to the Google 
> Groups "google-guice" group.
>         To unsubscribe from this group and stop receiving emails from it, 
> send an email to google-guice...@googlegroups.com.
> 
>         To view this discussion on the web visit 
> https://groups.google.com/d/msgid/google-guice/CAMr6Z4nE1mYJ2uj%3DLKWcSWM_rq4eejDrNnOGsZv%3DgTyRtT1qKA%40mail.gmail.com
>  
> <https://groups.google.com/d/msgid/google-guice/CAMr6Z4nE1mYJ2uj%3DLKWcSWM_rq4eejDrNnOGsZv%3DgTyRtT1qKA%40mail.gmail.com?utm_medium=email&utm_source=footer>.
> 
> -- 
> You received this message because you are subscribed to a topic in the Google 
> Groups "google-guice" group.
> To unsubscribe from this topic, visit 
> https://groups.google.com/d/topic/google-guice/0inCjcpWUwc/unsubscribe.
> To unsubscribe from this group and all its topics, send an email to 
> google-guice+unsubscr...@googlegroups.com 
> <mailto:google-guice+unsubscr...@googlegroups.com>.
> To view this discussion on the web visit 
> https://groups.google.com/d/msgid/google-guice/8f6689ef-f1d9-49b5-a32a-69c95b11a7ddn%40googlegroups.com
>  
> <https://groups.google.com/d/msgid/google-guice/8f6689ef-f1d9-49b5-a32a-69c95b11a7ddn%40googlegroups.com?utm_medium=email&utm_source=footer>.

-- 
You received this message because you are subscribed to the Google Groups 
"google-guice" group.
To unsubscribe from this group and stop receiving emails from it, send an email 
to google-guice+unsubscr...@googlegroups.com.
To view this discussion on the web visit 
https://groups.google.com/d/msgid/google-guice/33f7452c-15e0-cb5e-69f0-0a12890621e1%40gmail.com.

Reply via email to