web-dev-qa-db-fra.com

Fichiers de propriétés de sonar

J'ai un projet qui a la structure de package suivante

src/main/proj
    -com.company.package
        -appName
            -morepackages

        -appVersion2
            -morepackages

sonar-runner.properties
sonarBuild.sh
sonar-runner-project2.properties
sonarBuildProject2.sh

En l'état actuel des choses, avec le fichier de propriétés par défaut, je peux exécuter le rapport de sonar, qui générera une révision de l'ensemble du projet.

sonar.projectKey=KEY
sonar.projectName=PROJNAME
sonar.projectVersion=1.0

sonar.Host.url=someurl

#Path for sonar sources
sonar.sources=src/main/Java

#Path for libraries
sonar.libraries=target/lib/*.jar

#Path for binaries
sonar.binaries=target/classes

#--------Default database
sonar.jdbc.url=someurl
sonar.jdbc.driver=com.mysql.jdbc.Driver

#----- Global database settings
sonar.jdbc.username=sonar
sonar.jdbc.password=sonar

#----- Default directory layout
sonar.Java.source=1.6
sonar.Java.target=1.6

sonar.sourceEncoding=UTF-8

Idéalement, je souhaiterais toutefois séparer les deux rapports afin d’en avoir un pour le package original et un pour le package appVersion2. Maintenant - comme mentionné ci-dessus, j'ai créé un fichier de propriétés distinct pour chacun. Dois-je simplement indiquer sonar.sources aux packages respectifs pour chaque travail à analyser ou existe-t-il un meilleur moyen de le faire dans un seul fichier de propriétés? 

Merci

MODIFIER

Mon fichier de propriétés de tentative de multi-module se présente comme suit

sonar.projectKey=rootkey
sonar.projectName=rootname
sonar.projectVersion=1.0
sonar.Host.url=rooturl
sonar.sources=src/main/Java/
sonar.libraries=target/lib/*.jar
sonar.modules=module1,module2
sonar.sourceEncoding=UTF-8

#----- Global database settings
sonar.jdbc.username=user
sonar.jdbc.password=pass

sonar.Java.source=1.7
sonar.Java.target=1.7


#--------Default database
sonar.jdbc.url=url
sonar.jdbc.driver=com.mysql.jdbc.Driver


module1.sonar.projectName=proja
module2.sonar.projectName=projb

module1.sonar.projectKey=projakey
module2.sonar.projectKey=projbkey

#Path for sonar sources
module1.sonar.sources=src/main/Java/app1code
module2.sonar.sources=src/main/Java/app2code

#Path for binaries
module1.sonar.binaries=target/classes/app1binaries
module2.sonar.binaries=target/classes/app2binaries

Je reçois une erreur dans la sortie en disant ...

Exception in thread "main" org.sonar.runner.RunnerException: org.sonar.runner.RunnerException: The base directory of the module 'module1' does not exist: patthtoapp/module1
    at org.sonar.runner.Runner.delegateExecution(Runner.Java:288)
    at org.sonar.runner.Runner.execute(Runner.Java:151)
    at org.sonar.runner.Main.execute(Main.Java:84)
    at org.sonar.runner.Main.main(Main.Java:56)
Caused by: org.sonar.runner.RunnerException: The base directory of the module 'module1' does not exist: pathtoapp/module1
    at org.sonar.runner.internal.batch.SonarProjectBuilder.setProjectBaseDir(SonarProjectBuilder.Java:279)
    at org.sonar.runner.internal.batch.SonarProjectBuilder.loadChildProject(SonarProjectBuilder.Java:191)
    at org.sonar.runner.internal.batch.SonarProjectBuilder.defineChildren(SonarProjectBuilder.Java:169)
    at org.sonar.runner.internal.batch.SonarProjectBuilder.generateProjectDefinition(SonarProjectBuilder.Java:122)
    at org.sonar.runner.internal.batch.Launcher.execute(Launcher.Java:58)
    at Sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
    at Sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.Java:57)
    at Sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.Java:43)
    at Java.lang.reflect.Method.invoke(Method.Java:601)
    at org.sonar.runner.Runner.delegateExecution(Runner.Java:285)
11
Biscuit128

Vous devez spécifier projectBaseDir si le nom du module ne correspond pas à votre répertoire de modules.

Étant donné que vos deux modules sont situés dans ".", Vous pouvez simplement ajouter ce qui suit aux propriétés de votre projet sonar:

module1.sonar.projectBaseDir=.
module2.sonar.projectBaseDir=.

Sonar traitera vos modules en tant que composants du projet:

Result of Sonar analysis

MODIFIER

Si vos deux modules se trouvent dans le même répertoire source, définissez le même dossier source pour les deux et excluez les packages indésirables avec sonar.exclusions:

module1.sonar.sources=src/main/Java
module1.sonar.exclusions=app2code/**/*

module2.sonar.sources=src/main/Java
module2.sonar.exclusions=app1code/**/*

Plus de détails sur l'exclusion de fichiers

24
Raphaël

Vous pouvez définir une structure de projet multi-module , puis définir la configuration du sondeur dans un fichier de propriétés situé dans le dossier racine de votre projet (Way #1).

3
vzamanillo

Effectuez d'abord le travail de création sur Jenkins sans configuration de Sonar. Ajoutez ensuite Sonar et exécutez à nouveau un travail de construction. Devrait résoudre le problème

0
amigo21