SonarQube ไม่รวมไดเร็กทอรี


133

ฉันพยายามแยกไดเรกทอรีออกจากการวิเคราะห์โดย Sonar ฉันมีคุณสมบัติต่อไปนี้ที่กำหนดไว้ในsonar-project.propertiesไฟล์ของฉัน:

sonar.sources=src/java
sonar.exclusions=src/java/test/****/*.java

โครงสร้างไดเรกทอรีที่ฉันมีคือ:

src/java/dig
src/java/test/dig

เมื่อฉันเรียกใช้ sonar-runner ฉันจะได้รับข้อมูลต่อไปนี้:

 INFO  - Excluded sources:
 INFO  -   src/java/test/**/*.java
 INFO  - Excluded tests:
 INFO  -   **/package-info.java

แต่เมื่อฉันตรวจสอบผลการวิเคราะห์แพ็คเกจทั้งหมดในไดเร็กทอรีทดสอบยังคงอยู่ที่นั่น

ฉันแค่ต้องบอก Sonar ว่าอย่าวิเคราะห์ไดเร็กทอรีทดสอบและแพ็คเกจใด ๆ ที่อยู่ในนั้น


3
ฉันพบวิธีแก้ปัญหา: sonar.exclusions = test / ** / *. java
user1982350

แต่ถ้าคุณต้องการหลีกเลี่ยงการวิเคราะห์ทดสอบคุณสามารถลองใช้ตัวอย่างเช่นmvn clean package -DskipTests
EddúMeléndez

คำตอบ:


123

ลองทำสิ่งนี้:

sonar.exclusions=src/java/test/**

4
ตรวจสอบให้แน่ใจว่าใช้รูปแบบ Ant fileglob สำหรับสัญลักษณ์แทน นี่คือคำอธิบายที่ดี: stackoverflow.com/a/86915/748524
Stephan

นี่คือนิยามตัวเลือกบรรทัดคำสั่งdocs.sonarqube.org/display/SONAR/…
N0dGrand87

5
ทุกคนที่เห็นนี้ให้แน่ใจว่าคุณมีแทนsrc/test/java src/java/test/
Faraz

วิธีการแยกวิธีการใน c #
nature vetri

โปรดทราบว่าสิ่งนี้ไม่ได้ถือเป็นนิพจน์ทั่วไปและนำไปใช้กับทั้งโปรเจ็กต์ของคุณsonar.exclusions=node_modules/**จะไม่รวมโฟลเดอร์ node_modules ที่ซ้อนกันคุณจะต้องทำsonar.exclusions=node_modules/**, /some/path/to/nested/node_modules/**เพื่อแยกออกอย่างชัดเจน
Christian Bartram

69

ฉันสามารถยกเว้นหลายไดเรกทอรีโดยใช้การกำหนดค่าด้านล่าง (เส้นทางโฟลเดอร์ที่คั่นด้วยจุลภาค):

sonar.exclusions=system/**, test/**, application/third_party/**, application/logs/**

และในขณะที่เรียกใช้ sonar runner ฉันได้สิ่งต่อไปนี้ในบันทึก:

Excluded sources: 
  system/**
  test/**
  application/third_party/**
  application/logs/**

18
ฉันได้รับข้อความที่ยกเว้น แต่ไฟล์ยังคงได้รับการวิเคราะห์
Sebas

ในพารามิเตอร์ Teamcity ฉันใช้เคล็ดลับของคุณ แต่ใส่ -D ก่อนหน้า (-Dsonar.exclu ... ) ทำงานที่นี่ :-)
Maciel Bombonato

จะแยกไฟล์ * .html ทั้งหมดออกจากการสแกนที่นี่ได้อย่างไร พยายามแล้วsonar.exclusions=**/bin/**,*.htmlแต่ยังต้องใช้ไฟล์ html ในการสแกน ไฟล์ Html เป็นโฟลเดอร์ย่อยทั้งหมดในหลาย ๆ ที่และการเพิ่มในระดับโฟลเดอร์ย่อยที่นี่ด้วยแผนที่เส้นทางจริงจะทำงานได้มากขึ้น มีวิธีที่เราสามารถยกเว้น * .specific_file_type ทั้งหมดจากการสแกนได้หรือไม่?
Elamurugan


14

หากเราต้องการข้ามโฟลเดอร์ทั้งหมดต่อไปนี้สามารถใช้ได้:

sonar.exclusions=folderName/**/*

และถ้าเรามีเพียงไฟล์เดียวเพียงแค่ระบุเส้นทางที่สมบูรณ์

โฟลเดอร์ทั้งหมดที่ต้องแยกออกและต่อท้ายที่นี่


2
อะไรคือความแตกต่างระหว่างคำตอบและsonar.exclusions=folderNameและsonar.exclusions=folderName/**? ขอบคุณ
payne

* - จับคู่อักขระศูนย์หรือมากกว่า ** - ตรงกับศูนย์หรือมากกว่าไดเรกทอรี? - จับคู่ตัวละครเดี่ยว
Keerthi Bandara

13

sonar.exclusionsกำหนดค่าตัวเลือกอีกอย่างหนึ่งคือการเพิ่มคุณสมบัติ Maven ด้านล่างนี้เป็นไฟล์ pom ตัวอย่างที่มีการยกเว้นไดเร็กทอรี jquery แบบคงที่และไดเร็กทอรีโปรแกรมดู pdf แบบคงที่

<project >
<modelVersion>4.0.0</modelVersion>
<artifactId>my Artifact</artifactId>
<!-- Enviroment variables can be referenced as such: ${env.PATH} -->
<packaging>war</packaging>
<url>http://maven.apache.org</url>

<properties>

    <junit.version>4.9</junit.version>
    <mockito.version>1.9.5</mockito.version>
    <jackson.version>1.9.7</jackson.version>
    <powermock.version>1.5</powermock.version>

    <!--Exclude the files Here-->
    <sonar.exclusions>src/main/webapp/static/jquery_ui/*,src/main/webapp/static/pdf-viewer/*,src/main/webapp/static/pdf-viewer/**,src/main/webapp/static/pdf-viewer/**/*</sonar.exclusions>
</properties>


7

วิธีที่ง่ายที่สุดคือไปที่ URL ของเซิร์ฟเวอร์หลังจากเริ่มเซิร์ฟเวอร์ (localhost: 8080) จากนั้นเข้าสู่ระบบในฐานะผู้ดูแลระบบไปที่การตั้งค่า> การยกเว้น> การยกเว้นไฟล์ต้นฉบับ - เพิ่มแพ็คเกจของคุณที่นี่ รีสตาร์ทเซิร์ฟเวอร์


2

คุณใช้โซนาร์รุ่นอะไร มีตัวเลือกหนึ่งที่เรียกว่า " sonar.skippedModules = yourmodulename "

การดำเนินการนี้จะข้ามโมดูลทั้งหมด ดังนั้นจงตระหนักไว้


13
คำเตือน - คุณสมบัติ 'sonar.skippedModules' เลิกใช้งานตั้งแต่เวอร์ชัน 4.3 และไม่ควรใช้อีกต่อไป
Zheng Kai

1

เพียงแค่พูดถึงว่าเมื่อคุณยกเว้นไฟล์จาก Sonar แล้วให้ทำเช่นเดียวกันกับปลั๊กอิน Jacoco:

<configuration>
<excludes>     
<exclude>com/acme/model/persistence/entity/TransactionEntity*</exclude>
<exclude>com/acme/model/persistence/ModelConstants.class</exclude>
</excludes>
</configuration> 

1

เพิ่มเส้นทางโฟลเดอร์ที่คั่นด้วยจุลภาค sonar.exclusions=**/abc/**,**/def/**

สิ่งนี้ใช้ได้ผลในโครงการเชิงมุม


1

หากคุณเป็นผู้ใช้ Azure DevOps ที่กำลังมองหาสถานที่และวิธีการแยกไฟล์และโฟลเดอร์ไปที่นี่:

  1. แก้ไขไปป์ไลน์ของคุณ
  2. ตรวจสอบให้แน่ใจว่าคุณได้เพิ่มงาน "จัดเตรียมการวิเคราะห์บน SonarQube" แล้ว คุณจะต้องดูที่อื่นหากต้องการความช่วยเหลือในการกำหนดค่านี้คำแนะนำ: ใช้ตัวแก้ไขไปป์ไลน์ UI เทียบกับตัวแก้ไข yaml หากคุณไม่มีลิงก์จัดการ ในปัจจุบันไม่มีวิธีการแปลงเป็น UI จาก yaml เพียงสร้างท่อใหม่ หากใช้ git คุณสามารถลบ yaml จากรูทของ repo ของคุณได้
  3. ในส่วน "ขั้นสูง" ของงาน "เตรียมการวิเคราะห์บน SonarQube" คุณสามารถเพิ่มการยกเว้นได้ ดูคำแนะนำจากผู้อื่นสำหรับรูปแบบการยกเว้นเฉพาะ

ตัวอย่าง:

# Additional properties that will be passed to the scanner, 
# Put one key=value per line, example:
# sonar.exclusions=**/*.bin
sonar.exclusions=MyProjectName/MyWebContentFolder/**

หมายเหตุ: หากคุณไม่แน่ใจในเส้นทางคุณสามารถเข้าไปที่โซนาร์คิวบ์ดูโครงการของคุณดู 'กลิ่นรหัส' ทั้งหมดหรือใหม่และเส้นทางที่คุณต้องการจะแสดงอยู่เหนือการจัดกลุ่มปัญหาแต่ละกลุ่ม คุณสามารถคว้าเส้นทางแบบเต็มไปยังไฟล์หรือใช้ไวลด์ดังตัวอย่างเหล่านี้:

  • MyProjectName / MyCodeFile.cs
  • MyProjectName / **

หากคุณไม่ได้เพิ่มงาน 'Run Code Analysis' ให้ทำและวางไว้ที่ใดที่หนึ่งหลังจากงาน 'Build solution ** / *. sln'

บันทึกและจัดคิวจากนั้นตรวจสอบเซิร์ฟเวอร์ sonarqube ของคุณเพื่อดูว่าการยกเว้นทำงานหรือไม่


0

เพิ่มบรรทัดนี้ในไฟล์ sonar-project.properties ของคุณ

เช่น sonar.exclusions = src / *. java ระวังถ้าคุณต้องการยกเว้นโฟลเดอร์และภายในโฟลเดอร์มีไฟล์คุณต้องแยกไฟล์ออกก่อนหรือเพิ่มไฟล์ทีละไฟล์เช่นสมมติว่ามีโฟลเดอร์ดังต่อไปนี้ :

src/app.java src/controllers/home.java src/services/test.java

คุณต้องทำสิ่งนี้: sonar.exclusions=src/app.java,src/controllers/*.java,src/services/*.java

มันได้ผลสำหรับฉัน


0

คุณสามารถทำเช่นเดียวกันกับ build.gradle

sonarqube {
properties {
    property "sonar.exclusions", "**/src/java/test/**/*.java"
  }
}

และหากคุณต้องการยกเว้นไฟล์ / ไดเรกทอรีเพิ่มเติมให้ทำดังนี้

sonarqube {
properties {
    property "sonar.exclusions", "**/src/java/test/**/*.java, **/src/java/main/**/*.java"
  }
}

-1

สิ่งนี้ใช้ได้ผลสำหรับฉัน:

sonar.exclusions=src/**/wwwroot/**/*.js,src/**/wwwroot/**/*.css

ไม่รวมไฟล์. js และ. css ใด ๆ ภายใต้ไดเร็กทอรีย่อยใด ๆ ของโฟลเดอร์ "wwwroot" ที่ปรากฏเป็นหนึ่งในไดเร็กทอรีย่อยของโฟลเดอร์ "src" (รูทโปรเจ็กต์)


สิ่งนี้ดูเหมือนจะไม่แตกต่างจากคำตอบอื่น ๆ มากนัก ใช้สัญลักษณ์แทนรูปดาวคู่เหมือนกับคำตอบอื่น ๆ ไม่ตรงกับสิ่งที่คำถามพยายามยกเว้น
Stephen Ostermiller
โดยการใช้ไซต์ของเรา หมายความว่าคุณได้อ่านและทำความเข้าใจนโยบายคุกกี้และนโยบายความเป็นส่วนตัวของเราแล้ว
Licensed under cc by-sa 3.0 with attribution required.