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)
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:
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/**/*
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
).
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