سؤال

لدي إعداد مرشح قمع checkstyle (على سبيل المثال.تجاهل الأرقام السحرية في رمز اختبار الوحدة).

يوجد ملف XML الخاص بالقمع في نفس المجلد مثل ملف checkstyle XML.ومع ذلك، يختلف مكان وجود هذا الملف فعليًا:على مربع Windows Dev الخاص بي ، يكون في D: dev sharbor checkstyle config على خادم Linux CI سيكون في/root/repo/sharning/checkstyle/config على مربع مطورين آخر يمكن أن يكون في أي مكان (يقومون بالتحقق منهم svn repo إلى).

الشيء "المتسق" الوحيد هو أن ملف القمع موجود دائمًا في نفس المجلد مثل ملف checkstyle xml.لا أستطيع معرفة كيفية التأكد من أن هذا الملف يتم التقاطه دائمًا باستمرار.كما أنني لا أعرف لماذا لا يدعم checkstyle القمع المضمن داخل ملف checkstyle xml.

أي مساعدة؟

هل كانت مفيدة؟

المحلول

وكان لي نفس هذه المشكلة مع التكوين قمع Checkstyle عندما كنت ذاهبا ذهابا وإيابا بين لينكس وويندوز. وإليك كيف حلها في بلدي بناء نظام قائم على النملة:

والأساس، وأنا حقن قيمة الدليل المناسبة، منصة محددة في ملف التكوين Checkstyle الرئيسي عن طريق تكوين ملف خصائص Checkstyle مع برنامج نصي بناء Ant.

وبلدي ملف التكوين Checkstyle الرئيسي لديها إعلان وحدة SuppressionFilter كما هو مبين أدناه. قيمة الممتلكات checkstyle-suppressions-file تأتي من ملف خصائص Checkstyle:

<module name="SuppressionFilter">
    <property name="file" value="${checkstyle-suppressions-file}"/>
</module>

وليس ثابت، يتم إنشاء ملف خصائص Checkstyle من قبل برنامج نصي بناء Ant من خصائص ملف قالب يسمى template-checkstyle.properties. وهنا ما يبدو قالب مثل لخاصية ملف القمعية:

checkstyle-suppressions-file=@SCM_DIR@/checkstyle_suppressions.xml

وبلدي النملة بناء النصي نسخ هذا الملف إلى checkstyle.properties ملف اسمه. النسخة حلت محل رمز خاص مع القيمة الصحيحة من الدليل الذي تم العثور على الملف القمعية:

<copy file="${scm.dir}/template-checkstyle.properties" tofile="${scm.dir}/checkstyle.properties">
    <filterset>
        <filter token="SCM_DIR" value="${scm.dir.unix}"/>
    </filterset>
</copy>

والآن، حيث لا قيمة scm.dir.unix تأتي من؟ حسنا، انها <م> المستمدة من خاصية بلدي بناء، على قراءة. سوف تحتاج إلى تحديد مثل هذه القيمة مع القيم الدليل الذي ذكرتم.

لاحظ أن هناك قضية واحدة قليلا غير واضحة فيما يتعلق بالطريقة التي تحددها هذا الدليل. أقول مشتق قيمة scm.dir.unix من خاصية البناء لأنني لاحظت أن ملف التكوين Checkstyle الرئيسي لا يمكن أن تحتوي الخطوط المائلة العكسية، وشخصيات أي ويندوز مسار فاصل في قيمة العقار file وحدة SuppressionFilter. على سبيل المثال، تحديد شيء من هذا القبيل C:\foo\bar\baz يؤدي إلى رسالة الخطأ Checkstyle قائلا لا يمكن العثور التي C:foobarbaz. I كمحاولة للتغلب على هذا عن طريق "تحويل" الملكية بناء دليل scm.dir إلى تنسيق "يونيكس" مع مهمة pathconvert النملة و:

<pathconvert targetos="unix" property="scm.dir.unix">
    <path location="${scm.dir}"/>
</pathconvert>

وبعد ذلك أدعو مهمة النملة checkstyle مثل هذا:

<checkstyle config="${scm.dir}/checkstyle_checks.xml"
            properties="${scm.dir}/checkstyle.properties">
    <!-- details elided -->
</checkstyle>

والدعوة لهذه المهمة checkstyle تضخ أزواج المفتاح / القيمة الموجودة في ملف checkstyle.properties في التكوين Checkstyle الرئيسي.

إذا أردت، يمكنك أن ترى النصوص الكاملة هنا

ويساعد هذا الأمل

نصائح أخرى

في كسوف أضع التالية التي لا تتطلب لي أن أضيف أي خصائص إضافية:

<module name="SuppressionFilter">
    <property name="file" value="${samedir}/suppressions.xml"/>
</module>

وأحصل على المسار المطلق إلى الدليل الذي يقيم build.xml باستخدام متغير ant.file واسم المشروع:

<project name="common" ... >
  <dirname property="thisdir" file="${ant.file.common}"/>

وبعد ذلك يمكنني سلسلة مسار مطلق لبلدي ملفات التكوين checkstyle:

checkstyle.suppressions.file=${thisdir}/qclib/checkstyle-suppressions.xml

ومنذ متغير thisdir يأتي من النمل، لا يبدو في حاجة إلى تحويل مسار فاصل.

إذا كنت تعمل مع الكسوف وكان لديك ملف قمع في نفس الدليل التكوين checkstyle الخارجي، يمكنك إعداد مرشح قمع مثل هذا:

<module name="SuppressionFilter">
    <property name="file" value="${config_dir}/my_suppressions.xml"/>
</module>

وأنت أيضا يجب تحديد الملكية $ {config_dir} في تكوين checkstyle:

وتفضيلات الكسوف -> "Checkstyle" -> اختر خدمات العملاء التكوين الخاص بك -> "خصائص .." -> "خصائص إضافية .."

وتحديد خاصية لدير التكوين checkstyle:

config_dir --->  ${config_loc}

وأعتقد يمكن تمديد الجواب روبرت لحل سهل لعلى نملة والكسوف : ل

تضمين ملف قمع داخل XML التكوين الخاصة بك مثل هذا:

<module name="SuppressionFilter">
    <property name="file" value="${samedir}/suppressions.xml"/>
</module>

والآن، والكسوف هو راض ويجد الملف.

لتحصل النملة للعمل تحديث الهدف الخاص بك إلى شيء من هذا القبيل:

<checkstyle config="${checkstyle.config}/checkstyle-checks.xml">
    <!-- ... -->
    <property key="samedir" value="${checkstyle.config}"/>
</checkstyle>

وآمل أن يساعد هذا.

منذ الإصدار CheckStyle 4.26.0، يمكنك استخدام الثوابت المحددة مسبقًا في ملفات التكوين الخاصة بك.

(https://github.com/jshiell/checkstyle-idea/issues/217) :

  • ${basedir} & ${project_loc} - يتم تعيينه إلى دليل المشروع الحالي
  • ${workspace_loc} - يتم تعيينه إلى دليل مساحة عمل Eclipse الحالي
  • ${config_loc} & ${samedir} - يتم تعيينه إلى الدليل الذي يوجد به ملف التكوين

إذا كنت ترغب في مشاركة التكوين مع maven، فسوف تحتاج إلى "اسم مستعار" لـ "ثوابت Eclipse" في تكوين POM الخاص بك (في قسم التقارير) باستخدام عنصر التكوين "propertyExpansion":

<plugin>
   <groupId>org.apache.maven.plugins</groupId>
   <artifactId>maven-checkstyle-plugin</artifactId>
   <version>3.0.0</version>
   <configuration>
      <configLocation>${project.basedir}/quality/checkstyle/dap_checkstyle_checks.xml</configLocation>
      <propertyExpansion>basedir=${project.basedir}</propertyExpansion>
   </configuration>
   <reportSets>
      <reportSet>
         <reports>
            <report>checkstyle</report>
         </reports>
      </reportSet>
   </reportSets>
</plugin>

"propertyExpansion" مستوحى من: https://github.com/checkstyle/checkstyle/blob/master/pom.xml#L582.

مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top