IMO we should be looking to create a JARJARed version of Aether and
removing Ivy all together

Ivy is broken fundamentally in numerous ways and is no longer
developed and maintained. I cannot recommend that anyone uses @Grab
currently because it breaks down in pretty much any real world
scenarios.

There is an Aether implementation as part of Spring Boot
https://github.com/spring-projects/spring-boot/blob/master/spring-boot-cli/src/main/java/org/springframework/boot/cli/compiler/grape/AetherGrapeEngine.java

That should be merged into Groovy. The only downside is that Aether is
several jars rather than just a single one as is the case with Ivy.

For this we would need to create a JARJAR'ed version of those dependencies.

Cheers

On Fri, Jan 20, 2017 at 11:42 PM, Sergei Egorov <bsid...@gmail.com> wrote:
> FYI https://github.com/igor-suhorukov/mvn-classloader
>
> On Tue, Jan 10, 2017 at 11:43 AM Romain Manni-Bucau <rmannibu...@gmail.com>
> wrote:
>>
>> Hmm, ibiblio (localm2 in grapesConfig.xml) has
>> setChangingPattern(".*-SNAPSHOT"); so should have worked OOTB....but
>>
>> org.apache.ivy.plugins.resolver.ChainResolver#getDependency checks the ivy
>> (default) cache before using resolvers so resolvers are basically skipped
>> and even the localm2 good behavior is ignored cause in
>> org.apache.ivy.plugins.resolver.BasicResolver#getDependency
>> shouldReturnResolvedModule() makes  it bypassed
>>
>> Looks like a bug in ivy, wdyt? Adding in this test a changing pattern test
>> (String.valueOf(dd.getAttribute("revision")).matches(getChangingPattern()))
>> would make it working.
>>
>> Of course this is doable in groovy but should probably be reported to ivy.
>>
>> Wdyt?
>>
>>
>>
>> Romain Manni-Bucau
>> @rmannibucau |  Blog | Old Blog | Github | LinkedIn | JavaEE Factory
>>
>> 2017-01-10 10:10 GMT+01:00 Paul King <pa...@asert.com.au>:
>>>
>>> Perhaps something can be done but some people use snapshots without
>>> any timestamps. As long as that didn't break. I think years ago it
>>> became a lot slower in that scenario if we auto set 'changing'. Not
>>> sure if that is the case any longer.
>>>
>>> Cheers, Paul.
>>>
>>> On Tue, Jan 10, 2017 at 6:48 PM, Romain Manni-Bucau
>>> <rmannibu...@gmail.com> wrote:
>>> > Ok, imported the project and...discovered changing() :). Think it can
>>> > solve
>>> > the issue for now. Then the remaining question is the duplication of
>>> > the
>>> > repo but guess I can live with it for now. In GrapeIvy do we want to
>>> > move
>>> >
>>> > boolean changing   = deps.containsKey('changing')   ? deps.changing   :
>>> > false
>>> >
>>> > to
>>> >
>>> > boolean changing   = deps.containsKey('changing')   ? deps.changing ||
>>> > version.endsWith('-SNAPSHOT')   : false
>>> >
>>> >
>>> > ?
>>> >
>>> > Not an issue if not, would just makes maven standard better integrated
>>> > with
>>> > the pitfall of having changing value forced (so less obvious).
>>> >
>>> > wdyt?
>>> >
>>> > Romain Manni-Bucau
>>> > @rmannibucau |  Blog | Old Blog | Github | LinkedIn | JavaEE Factory
>>> >
>>> > 2017-01-10 1:36 GMT+01:00 Jochen Theodorou <blackd...@gmx.org>:
>>> >>
>>> >> well... contributions are welcome ;)
>>> >>
>>> >> On 06.01.2017 15:36, Romain Manni-Bucau wrote:
>>> >>>
>>> >>>
>>> >>>
>>> >>> 2017-01-06 15:33 GMT+01:00 Jochen Theodorou <blackd...@gmx.org
>>> >>> <mailto:blackd...@gmx.org>>:
>>> >>>
>>> >>>
>>> >>>     On 06.01.2017 15:00, Romain Manni-Bucau wrote:
>>> >>>     [...]
>>> >>>
>>> >>>         Means SNAPSHOT patterns needs to be identified (likely a flag
>>> >>> in
>>> >>> the
>>> >>>         @Grab(snapshot=true)?) and groovy should clean up the
>>> >>> artifacts
>>> >>>         before
>>> >>>         resolving to avoid to let ivy mess up its repo.
>>> >>>
>>> >>>
>>> >>>     which means it is more than just a change in the configuration
>>> >>> file.
>>> >>>
>>> >>>
>>> >>> Both options are valid but I think you had a good point and it can be
>>> >>> API intrusive
>>> >>>
>>> >>>         For maven based artifact
>>> >>>         it also means you run copies instead of maven repository ones
>>> >>>         which is
>>> >>>         leading to unexpected runtime sometimes.
>>> >>>
>>> >>>
>>> >>>     can you explain a bit more? you mean the local ivy repo with
>>> >>> copy?
>>> >>>
>>> >>>
>>> >>> Yes, if you don't remove the snapshot copy from ~/.groovy/grapes/
>>> >>> then
>>> >>> you use the last resolved one which is likely outdated with maven
>>> >>> repo.
>>> >>>
>>> >>>                  - what kind of SPI groovy would use (ATM GrapeEngine
>>> >>>         lookup is quite
>>> >>>                  hardcoded): do we want a config in groovy
>>> >>> installation
>>> >>>         + system
>>> >>>                  property?
>>> >>>
>>> >>>              would someone want to define the engine as part of the
>>> >>>         annotation or
>>> >>>              should this be automatic in the background? We could
>>> >>> also
>>> >>>         think of
>>> >>>              using the Java service provider interface logic - of
>>> >>> course
>>> >>>         then we
>>> >>>              have to think about what to do if multiple engines are
>>> >>> there
>>> >>>
>>> >>>         sounds good in @Grab with probably a default globally
>>> >>> settable
>>> >>>         in the
>>> >>>         script.
>>> >>>
>>> >>>
>>> >>>     yes I think we can do that
>>> >>>
>>> >>>                  - if we want another engine: how do we manage
>>> >>>         dependencies? do we
>>> >>>                  isolate them from groovy libs?
>>> >>>
>>> >>>
>>> >>>              they should be optional for the delivery.... and in the
>>> >>>         light of
>>> >>>              that I think depending on spring-boot-cli is an option
>>> >>>
>>> >>>         Alternative is to implement it in groovy without maven in a
>>> >>> light
>>> >>>         fashion, with
>>> >>>
>>> >>>
>>> >>> https://github.com/apache/tomee/blob/master/container/openejb-loader/src/main/java/org/apache/openejb/loader/provisining/MavenResolver.java
>>> >>>
>>> >>>
>>> >>> <https://github.com/apache/tomee/blob/master/container/openejb-loader/src/main/java/org/apache/openejb/loader/provisining/MavenResolver.java>
>>> >>>         and
>>> >>>
>>> >>>
>>> >>> https://github.com/apache/tomee/blob/master/container/openejb-loader/src/main/java/org/apache/openejb/loader/provisining/HttpResolver.java
>>> >>>
>>> >>>
>>> >>> <https://github.com/apache/tomee/blob/master/container/openejb-loader/src/main/java/org/apache/openejb/loader/provisining/HttpResolver.java>
>>> >>>         you can resolve most of maven artifacts. This code needs to
>>> >>> be
>>> >>>         reworked
>>> >>>         on its config side cause it is specific to tomee but my point
>>> >>> is
>>> >>>         in <
>>> >>>         400 LOC you can get a maven resolver you own and therefore
>>> >>>         supporting
>>> >>>         snapshots is very doable there.
>>> >>>
>>> >>>
>>> >>>     I would prefer depending on something existing, but 400 LOC is
>>> >>> not
>>> >>>     much and if that goes without further dependencies... well then
>>> >>> we
>>> >>>     should consider doing that
>>> >>>
>>> >>>
>>> >>> Agree, I only know aether (or its forks) which are far from 400 LOC
>>> >>> but
>>> >>> alternatives welcomed as well if they exist
>>> >>>
>>> >>>     bye Jochen
>>> >>>
>>> >>>
>>> >>
>>> >
>>
>>
>



-- 
Graeme Rocher

Reply via email to