2015-05-25 9 views
7

Sto sviluppando un plug-in per SonarQube 4.5.4/5.0.1. Vorrei usare il plugin sonar-dev per caricare un file JAR e riavviare rapidamente il server SQ. Il plug-in utilizza l'API REST (/api/system/restart), che viene abilitata impostando la proprietà sonar.dev=true.SonarQube non riesce a riavviarsi durante lo sviluppo di plugin

Ecco config:

<plugin> 
    <groupId>org.codehaus.sonar</groupId> 
    <artifactId>sonar-dev-maven-plugin</artifactId> 
    <version>1.8</version> 
    <configuration> 
     <sonarHome>F:\sonarqube-5.1\sonarqube-5.1</sonarHome> 
    </configuration> 
</plugin> 

Il problema è che server si blocca dopo ogni riavvio tentativo e devo riavviare manualmente, il che è frustrante e drena la mia produttività. Ecco lo stacktrace che viene restituito su ogni richiesta successiva dopo "restart".

org.jruby.exceptions.RaiseException: (NoMethodError) undefined method `controllers' for nil:NilClass 
    at org.jruby.RubyKernel.method_missing(org/jruby/RubyKernel.java:255) 
    at RUBY.method_missing(F:/sonarqube-5.1/sonarqube-5.1/web/WEB-INF/gems/gems/activesupport-2.3.15/lib/active_support/whiny_nil.rb:52) 
    at RUBY.add_java_ws_routes(F:/sonarqube-5.1/sonarqube-5.1/web/WEB-INF/config/../lib/java_ws_routing.rb:34) 
    at RUBY.reload(F:/sonarqube-5.1/sonarqube-5.1/web/WEB-INF/config/../lib/java_ws_routing.rb:58) 
    at RUBY.reload_application(F:/sonarqube-5.1/sonarqube-5.1/web/WEB-INF/gems/gems/actionpack-2.3.15/lib/action_controller/dispatcher.rb:58) 
    at RUBY.run(F:/sonarqube-5.1/sonarqube-5.1/web/WEB-INF/gems/gems/actionpack-2.3.15/lib/action_controller/reloader.rb:42) 
    at RUBY.call(F:/sonarqube-5.1/sonarqube-5.1/web/WEB-INF/gems/gems/actionpack-2.3.15/lib/action_controller/dispatcher.rb:108) 
    at RUBY.serve_rails(file:/F:/sonarqube-5.1/sonarqube-5.1/lib/server/jruby-rack-1.1.13.2.jar!/rack/adapter/rails.rb:34) 
    at RUBY.call(file:/F:/sonarqube-5.1/sonarqube-5.1/lib/server/jruby-rack-1.1.13.2.jar!/rack/adapter/rails.rb:39) 
    at RUBY.call(file:/F:/sonarqube-5.1/sonarqube-5.1/lib/server/jruby-rack-1.1.13.2.jar!/rack/handler/servlet.rb:22) 

And here's what happens in logspartendo dalla linea 71.

Secondo @Simon Brandhof, esso può essere collegato con classe loader, che blocca i file. Qualsiasi suggerimento o soluzione è molto apprezzato.

+0

Questi sembrano essere correlati: http://stackoverflow.com/questions/11273303/java-classloader-dilemma-with-locked-jars e http://stackoverflow.com/questions/3216780/problem-reloading-a -jar-using-urlclassloader – Sergey

risposta

6

Il plug-in Java sembra bloccare il suo classloader. Disinstallarlo, eliminando extensions/plugins/sonar-java-plugin-3.0.jar, dovrebbe risolvere il problema.

+0

Ehi, ha funzionato. Comunque ho dovuto cambiare l'ambito della dipendenza 'java-squid: 3.2' in' compile', che in precedenza avevo impostato su 'provided'. Il peso del mio pacco è cambiato da '29KB' a' 2.4MB', perché anche molte altre librerie erano incluse. (deps transitivi?) È la strada da percorrere? Funzionerà, quando SQ avrà versioni diverse della stessa libreria 'java-squid' da diversi plugin? –

+0

Inoltre, ho appena saputo che il mio plugin si basa sul plugin Java, poiché aggiunge un paio di regole extra. Pertanto, il mio plugin non funziona senza di esso. :-) –

+1

Non aiuta molto nel mio caso particolare, dato che sono dipendente da quel plugin, ma risolve il problema stesso. Il ticket dovrebbe essere aumentato per risolvere il plugin java. Grazie per lo sforzo! Per i più curiosi, ho deciso di andare con lo sviluppo di plug-in dell'unità test per accelerare e funziona bene. Non c'è bisogno di server durante lo sviluppo. –