0
点赞
收藏
分享

微信扫一扫

Java代码p3c扫描并输出到指定格式Excel

何以至千里 2021-09-21 阅读 43

背景

P3C

实操

找到我们的POM.XML文件 , 添加以下配置
<build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
                <configuration>
                    <excludes>
                        <exclude>
                            <groupId>org.projectlombok</groupId>
                            <artifactId>lombok</artifactId>
                        </exclude>
                    </excludes>
                </configuration>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-pmd-plugin</artifactId>
                <version>3.8</version>
                <configuration>
                    <!-- 规范的配置  https://github.com/alibaba/p3c -->
                    <rulesets>
                        <ruleset>rulesets/java/ali-comment.xml</ruleset>
                        <ruleset>rulesets/java/ali-concurrent.xml</ruleset>
                        <ruleset>rulesets/java/ali-constant.xml</ruleset>
                        <ruleset>rulesets/java/ali-exception.xml</ruleset>
                        <ruleset>rulesets/java/ali-flowcontrol.xml</ruleset>
                        <ruleset>rulesets/java/ali-naming.xml</ruleset>
                        <ruleset>rulesets/java/ali-oop.xml</ruleset>
                        <ruleset>rulesets/java/ali-orm.xml</ruleset>
                        <ruleset>rulesets/java/ali-other.xml</ruleset>
                        <ruleset>rulesets/java/ali-set.xml</ruleset>
                    </rulesets>
                    <printFailingErrors>true</printFailingErrors>
                </configuration>
                <executions>
                    <!-- 绑定pmd:check到verify生命周期 -->
                    <execution>
                        <id>pmd-check-verify</id>
                        <phase>verify</phase>
                        <goals>
                            <goal>check</goal>
                        </goals>
                    </execution>
                    <!-- 绑定pmd:pmd到site生命周期 -->
                    <execution>
                        <id>pmd-pmd-site</id>
                        <phase>site</phase>
                        <goals>
                            <goal>pmd</goal>
                        </goals>
                    </execution>
                </executions>
                <!-- p3c依赖 -->
                <dependencies>
                    <dependency>
                        <groupId>com.alibaba.p3c</groupId>
                        <artifactId>p3c-pmd</artifactId>
                        <version>1.3.6</version>
                    </dependency>
                </dependencies>
            </plugin>

            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-site-plugin</artifactId>
                <version>3.7.1</version>
            </plugin>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-project-info-reports-plugin</artifactId>
                <version>3.0.0</version>
            </plugin>

        </plugins>

    </build>
    <reporting>
        <plugins>
            <plugin>
                <groupId>org.apache.maven.plugins</groupId>
                <artifactId>maven-jxr-plugin</artifactId>
                <version>2.5</version>
            </plugin>
        </plugins>
    </reporting>
IDEA 右侧就会出现pmd相关命令

双击运行pmd:pmd 就行了;或者使用mvn pmd:pmd


解析生成的XML即可,本文使用Python处理,语言自己选择(粘贴过来格式有点问题、自己格式化一下)

# coding=UTF-8
import openpyxl, os
from xml.etree import ElementTree as ET

      tree = ET.parse('xml文件路径')
        rootNodes = tree.getroot()
        all_data = []
        for rootNode in rootNodes:
            # 类路径
            name = rootNode.attrib.get('name') + ""
            for childNode in rootNode:
                # 存储数据的字典
                root_data = {}
                # 开始行数
                beginline = childNode.attrib.get('beginline')
                # Bug 级别 : 1、2级、3级
                priority = childNode.attrib.get('priority')

                # 异常说明
                text = childNode.text + ""
                text = text.replace("""\n""", "")
                # print("类路径 - {}".format(name))
                # print("开始行数 - {}".format(beginline))
                # print("Bug级别 - {}".format(priority))
                # print("异常说明 - {}".format(text))
                # print("******************************************")
                root_data['name'] = name
                root_data['beginline'] = beginline
                root_data['text'] = text
                all_data.append(root_data)

        if len(all_data) > 0:
            # 写入Excel(追加)Excel位置
            workbook = openpyxl.load_workbook('excel/excel_test.xlsx')
            # # 获得当前活跃的工作页,默认为第一个工作页
            table = workbook.active
            nrows = table.max_row  # 获得行数
            ncolumns = table.max_column  # 获得行数
            for value in all_data:
                # 第一列
                table.cell(nrows + 1, 1).value = ''
                # 第二列
                table.cell(nrows + 1, 2).value = ''
                # 多列自己追加
                nrows = nrows + 1
        # 保存位置
        workbook.save('excel/excel_test.xlsx')
        print("新增 {} 条".format(str(len(all_data))))
        print("******************* {} 结束 *******************".format(file_name))
举报

相关推荐

0 条评论