Nepříjemný bug v Mavenu

Na projektu používáme pro build nástroj Maven ve verzi 2.0.9. Jedná se o perfektní nástroj do doby, kdy pracuje tak, jak má. Ve chvíli, kdy se začne chovat „tak nějak divně“ se chyby hledají docela těžko.

Co se vlastně stalo? Začalo to tím, že testy začaly vyhazovat následující výjimky:

org.apache.commons.dbcp.SQLNestedException: Cannot create JDBC driver of class 'oracle.jdbc.driver.OracleDriver' for connect URL 'http://maven.apache.org'
	at org.apache.commons.dbcp.BasicDataSource.createDataSource(BasicDataSource.java:1150)
	at org.apache.commons.dbcp.BasicDataSource.getConnection(BasicDataSource.java:880)
	at org.hibernate.ejb.connection.InjectedDataSourceConnectionProvider.getConnection(InjectedDataSourceConnectionProvider.java:46)
	at org.hibernate.jdbc.ConnectionManager.openConnection(ConnectionManager.java:446)

To nejdivnější bylo to, že se aplikace snažila připojovat na URL: ‚http://maven.apache.org‘ místo toho, aby se připojovala na URL, která byla v konfiguraci.

Dalším pátráním jsem zjistil, že se v „targetu“, tedy místě, kam se ukládají zkompilované zdrojáky, vyskytuje soubor, definující springový kontext, a v něm se vyskytovalo následující (v property url):

    
       
       
       
       
    

Jak se tam to mohlo dostat, když ve zdrojáku je něco úplně jiného:

    
       
       
       
       
    

Začali jsme tedy pátrat, jak se tam mohl tento řetězec dostat, a měla to na svědomí tahle konstelace:
V POMu projektu byla definováno něco takového:


    4.0.0
    cz.csas.clf
    clf-micros-product-configurator
    war
    ${version.micros}
    clf-micros-product-configurator
    http://maven.apache.org 
       ...
    
        
           ...
            
                src/main/resources
                true
            
        
          ...

Co je na předchozím POMu zajímavých několik věcí. Je nastaveno filtrování resourců pro adresář, kde je uložen soubor s konfigurací a v projektu byl definován parametr url.

Díky chybě v mavenu došlo k nahrazení placeholderu ${jdbc.url} za property url, která navíc nebyla property 🙂

Naštěstí pomohl upgrade na nejnovější verzi mevenu (2.2.1), kde se chyba už nevyskytla. Zvláštní je, že jsem v žádných release notes nebo něčem podobným nenašel o tomto problému žádnou zmínku.

Jedna odpověď na “Nepříjemný bug v Mavenu”

Napsat komentář