akshattandon / projectlombok

Automatically exported from code.google.com/p/projectlombok
0 stars 0 forks source link

Version 1.16.0 renames Delombok, now inaccessible #775

Closed GoogleCodeExporter closed 9 years ago

GoogleCodeExporter commented 9 years ago
I'm trying to update the lombok-maven-plugin for the 1.16.0 release and am 
running into a build problem:

[ERROR] Failed to execute goal 
org.apache.maven.plugins:maven-compiler-plugin:3.2:compile (default-compile) on 
project lombok-maven-plugin: Compilation failure: Compilation failure:
[ERROR] 
/Users/anthony/Documents/lombok.maven/lombok-maven-plugin/src/main/java/lombok/m
aven/AbstractDelombokMojo.java:[19,23] package lombok.delombok does not exist
[ERROR] 
/Users/anthony/Documents/lombok.maven/lombok-maven-plugin/src/main/java/lombok/m
aven/AbstractDelombokMojo.java:[20,32] package lombok.delombok.Delombok does 
not exist

It looks like the classes were renamed:
    lombok/delombok/Delombok.class
is now:
    lombok/delombok/Delombok.SCL.lombok

My code needs to import Delombok, but how can it given the rename?  (I'm 
surprised that the extension doesn't need to be .class.)

How does your AntTask deal with this?

Original issue reported on code.google.com by anth...@whitford.com on 27 Jan 2015 at 6:20

GoogleCodeExporter commented 9 years ago
Hmm, I don't know if we updated that one :-)

I don't have an exact solution but you need to use 
lombok.launch.Main#createShadowClassLoader() or similar code to create a 
classloader that's aware of the SCL.lombok files, and use Class.forName on that 
classloader to load your own code.

I think you either need to use reflection or have at least one of your classes 
in the same package since all (or at least most) of the code involved is 
package private.

We will need to consider a public API, and also update the AntTask.

Original comment by r.spilker on 27 Jan 2015 at 12:35

GoogleCodeExporter commented 9 years ago
OK, it was a bit of a pain, but I think I got this working based on your 
advice.  Thanks.

BTW...  I thought that this kind of obfuscation was not necessary with OSGi.

Original comment by anth...@whitford.com on 28 Jan 2015 at 9:42

GoogleCodeExporter commented 9 years ago
OSGi makes this kind of obfuscation mostly unneccessary, but we can't very well 
demand OSGi from all our users, so we went with this solution. Unlike OSGi, the 
shadowloader doesn't have any restrictions.

Original comment by reini...@gmail.com on 30 Jan 2015 at 2:43

GoogleCodeExporter commented 9 years ago
ant task now fixed with full hiding, though regrettably the ant task classname 
has been changed, which isn't backwards compatible.

Fixed in 8ed49ce0b5c0dbddb66a5519086a033889e6e2e2

Original comment by reini...@gmail.com on 30 Jan 2015 at 2:47