felix-dev mailing list archives

Site index · List index
Message view « Date » · « Thread »
Top « Date » · « Thread »
From "Felix Meschberger (JIRA)" <j...@apache.org>
Subject [jira] Commented: (FELIX-2492) cxr plugin: using src annotations causes NoClassDefFoundError and other errors
Date Sun, 01 Aug 2010 09:10:15 GMT

    [ https://issues.apache.org/jira/browse/FELIX-2492?page=com.atlassian.jira.plugin.system.issuetabpanels:comment-tabpanel&focusedCommentId=12894353#action_12894353
] 

Felix Meschberger commented on FELIX-2492:
------------------------------------------

Comes to mind: Another, even better option than adding a compile-scope dependency on slf4j-simple
is to not use constant fields referring to SLF4J loggers. There are at least two good reasons
for this:

  (1) Having a complie-scope dependency on slf4-simple is bad, because the goal of slf4j is
to properly separate the compile time issues (cared for by the developer) from the run-time
issues (cared for by the deployer and/or system administrator). So, at least, you should mark
your slf4j-simple compile time dependency as optional so as to not transitively forward this
dependency.

  (2) Having constant references to complex objects makes the work of the garbage collector
unnecessarily hard: The referred-to object can only be collected once the class containing
the static final reference is collected ....

So, your best fix would probably be to change your "static final" reference to just a "final"
reference. And everything would be fine.

> cxr plugin: using src annotations causes NoClassDefFoundError and other errors
> ------------------------------------------------------------------------------
>
>                 Key: FELIX-2492
>                 URL: https://issues.apache.org/jira/browse/FELIX-2492
>             Project: Felix
>          Issue Type: Bug
>          Components: Maven SCR Plugin
>    Affects Versions:  maven-scr-plugin-1.4.4
>            Reporter: Michael Dürig
>
> Using comment tags and having a dependency on slf4j-api causes the scr plugin to throw
a NoClassDefFoundError:
> java.lang.NoClassDefFoundError: org/slf4j/impl/StaticLoggerBinder
> 	at org.slf4j.LoggerFactory.<clinit>(LoggerFactory.java:60)
> 	at com.day.crx.spi.sharepoint.resource.SharepointResourceProvider.<clinit>(SharepointResourceProvider.java:60)
> 	at sun.misc.Unsafe.ensureClassInitialized(Native Method)
> 	at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25)
> 	at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122)
> 	at java.lang.reflect.Field.acquireFieldAccessor(Field.java:918)
> 	at java.lang.reflect.Field.getFieldAccessor(Field.java:899)
> 	at java.lang.reflect.Field.get(Field.java:358)
> 	at org.apache.felix.scrplugin.tags.ClassUtil.getInitializationExpression(ClassUtil.java:41)
> 	at org.apache.felix.scrplugin.tags.qdox.QDoxJavaField.getInitializationExpression(QDoxJavaField.java:44)
> 	at org.apache.felix.scrplugin.helper.PropertyHandler.getPropertyName(PropertyHandler.java:239)
> A workaround is to add a 'dummy' dependency to i.e. slf4j-simple. But then
> [WARNING] Unused declared dependencies found:
> [WARNING]    org.slf4j:slf4j-simple:jar:1.5.0:provided
> Furthermore when the 'dummy' dependency has the wrong version, the scr plugin might throw
other errors:
> java.lang.NoSuchFieldError: name
> 	at org.slf4j.impl.Log4jLoggerAdapter.<init>(Log4jLoggerAdapter.java:75)
> 	at org.slf4j.impl.Log4jLoggerFactory.getLogger(Log4jLoggerFactory.java:75)
> 	at org.slf4j.LoggerFactory.getLogger(LoggerFactory.java:103)
> 	at com.day.crx.spi.sharepoint.resource.SharepointResourceProvider.<clinit>(SharepointResourceProvider.java:60)
> 	at sun.misc.Unsafe.ensureClassInitialized(Native Method)
> 	at sun.reflect.UnsafeFieldAccessorFactory.newFieldAccessor(UnsafeFieldAccessorFactory.java:25)
> 	at sun.reflect.ReflectionFactory.newFieldAccessor(ReflectionFactory.java:122)
> 	at java.lang.reflect.Field.acquireFieldAccessor(Field.java:918)
> 	at java.lang.reflect.Field.getFieldAccessor(Field.java:899)
> 	at java.lang.reflect.Field.get(Field.java:358)
> 	at org.apache.felix.scrplugin.tags.ClassUtil.getInitializationExpression(ClassUtil.java:41)
> 	at org.apache.felix.scrplugin.tags.qdox.QDoxJavaField.getInitializationExpression(QDoxJavaField.java:44)
> 	at org.apache.felix.scrplugin.helper.PropertyHandler.getPropertyName(PropertyHandler.java:238)
> I think such errors should be handled more gracefully indicating the source of the problem.
Also it should not be necessary to have a 'dummy' dependencies. This was not the case up to
version 1.4.1. 
> If it is absolutely necessary to include such dummy dependencies, the plugin should state
so in its error message. Also the slf4j case is so common that it might be worth to considering
a specific solution/workaround for this in the plugin. This is still much better than forcing
all clients to analyze the problem from the stacktrace and then implement workarounds.  

-- 
This message is automatically generated by JIRA.
-
You can reply to this email to add a comment to the issue online.


Mime
View raw message