Maven, Spring und Camel… und die Dependency-Hell


Quelle : http://upload.wikimedia.org

Eigentlich wollte ich eigentlich meine Camel-Spring-Applikation nur „schnell“ zusammenpacken und anstarten. Das stellte sich aber schwieriger heraus, als gedacht ­čÖü Unter den Buzzwords „Fat-Jar“, „Uber-Jar“ oder „Jar-with-Deps“ fasst man die Konstellation von Java-Klassen mit ihren entsprechenden Abh├Ąngigkeiten. Und mehr wollte ich auch gar nicht machen: Die camel-context.xml, die Start-Klasse (welche die eigentliche Main-Start-Klasse bootet) , ein paar Properties-Dateien und nat├╝rlich die Camel-Dependencies zusammenschn├╝ren und fertig. Stellte sich aber ein bisschen schwieriger an, weil st├Ąndig die Fehlermeldung kam, dass die camel-spring.xsd nicht gefunden werden konnte. Meinen Recherchen zu Folge h├Ąngt das mit den multiplen Spring-Dependencies zusammen, die ich per Assembly- resp. Copy-Plugin in einen Topf geworfen habe. Dabei ├╝berschreiben sich die spring.schemas-Dateien und spring.handler-Dateien, in denen die XSDs referenziert werden. Dass die Kollegen von Camel nicht unbedingt etwas f├╝r Standalone-Jars ├╝brig haben, zeigt das Ticket 3773 und deren Erkl├Ąrung auf der Camel-Website , in welchem aber auch ein Weg ├╝ber das Maven-Shade-Plugin beschrieben wird :


    org.apache.maven.plugins
    maven-shade-plugin
    1.4
    
        
            package
            
                shade
            
            
                
                    
                        
                            com.mycompanie.Mainclass
                        
                    
                    
                        META-INF/spring.handlers
                    
                    
                        META-INF/spring.schemas
                    
                    
                        META-INF/services/org/apache/camel/TypeConverter
                    
                    

                    
                        META-INF/maven/plugin.xml
                    
                    
                        META-INF/spring.tooling
                    
                    
                        META-INF/info.xml
                    
                    
                        META-INF/DISCLAIMER
                    
                    
                        META-INF/README.txt
                    
                    
                        META-INF/DEPENDENCIES
                    
                    
                        META-INF/LICENSE
                    
                    
                        META-INF/LICENSE.txt
                    
                    
                        META-INF/NOTICE
                    
                    
                        META-INF/NOTICE.txt
                    
                
            
        
    

Damit werden die spring-schemas und spring-handlers nicht mehr ├╝berschrieben, sondern gemerged und endlich (!) ist das Ding ├╝ber java -jar camel.jar ausf├╝hrbar ­čÖé

Das merkw├╝rdige dabei war immer, dass das Projekt ├╝ber mvn camel:run ordnungsgem├Ą├č gebootet hat :-/