Darryl L. Miles created WICKET-4508:
---------------------------------------

             Summary: Multiple JARs containing one or more *.class in the same 
package org/apache/wicket/serialize/IClusterable.class should not be in Maven 
binary wicket-util
                 Key: WICKET-4508
                 URL: https://issues.apache.org/jira/browse/WICKET-4508
             Project: Wicket
          Issue Type: Bug
          Components: wicket
    Affects Versions: 1.5.5
            Reporter: Darryl L. Miles


Multiple JARs containing one or more *.class in the same package 
org/apache/wicket/serialize/IClusterable.class should not be in Maven binary 
wicket-util


The Maven wicket-util JAR has one or more *.class files in the same package as 
another JAR.

wicket-core has org/apache/wicket/Application.class (1 file listed of 79)
wicket-util has org/apache/wicket/IClusterable.class (1 file listed of 1)

This is not allowed by standard Java ClassLoading rules.  The ClassLoader has 
the right to stop searching to remainder of the CLASSPATH once it finds the 
first CLASSPATH entry to contain one or more file resources inside a package.  
That CLASSPATH entry can then be considered authoritative for that package.

The specification allows for a ClassLoader implemented to perform an exhaustive 
search of all CLASSPATH entries (if it wants) but it is not a requirement.  So 
in this way you need to specialized ClassLoader in order to see 1 package split 
across multiple JARs.

It is better for all Java projects to produce redistributes / binary releases 
that are are compatible as possible with the Java ecosystem.

This issue is also a violation of OSGi packaging principals.  If you happen to 
care about OSGi.


Possible Solution:

1) Ensure the org/apache/wicket/IClusterable.class file is put into the 
wicket-core Maven module.


2) Change the package that IClusterable belongs, maybe 
org/apache/wicket/serialize/IClusterable.class would be a good choice.  But I'd 
guess this breaks backwards compatibility.


It maybe worth investigating why org/apache/wicket/serialize/ISerializer.class 
is also in wicket-util as I think this also would be better moved into 
wicket-core.  However this is not causing any harm that I can see as no other 
JAR I have checked contains one or more file resources in the package 
org/apache/wicket/serialize.  There is a package called 
org/apache/wicket/serialize/java in wicket-core but that does not count for the 
purpose of this rule.

--
This message is automatically generated by JIRA.
If you think it was sent incorrectly, please contact your JIRA administrators: 
https://issues.apache.org/jira/secure/ContactAdministrators!default.jspa
For more information on JIRA, see: http://www.atlassian.com/software/jira

        

Reply via email to