Есть ли плагин Gradle для проверки XML? - PullRequest
0 голосов
/ 09 ноября 2018

Я работаю над проектом, в котором у нас есть XML-файлы для генерации кода, и мы используем gradle для его создания.

Я новичок в gradle, но я слышал, что есть много plugins, которые могут помочь с рутинными задачами, и мне интересно, есть ли какие-нибудь плагины для простой проверки XML (пропущенные кавычки и скобки).

Я бы хотел получить имя файла и список пропущенных в результате.

PS Пытался искать в Google, но не смог найти что-то подобное.

UPD Если в недалеком будущем потребуется полная проверка XML-файла (теги, параметры), что мне делать?

1 Ответ

0 голосов
/ 10 ноября 2018

Довольно просто написать свой собственный

class XmlValidate extends DefaultTask {
    @InputFiles
    private FileCollection xmlFiles

    @InputFile
    File xsd

    void xml(Object files) {
       FileCollection fc = project.files(files)
       this.xmlFiles = this.xmlFiles == null ?  fc : this.xmlFiles.add(fc)
    }

    @TaskAction
    public void validateXml() {
        DocumentBuilder parser = DocumentBuilderFactory.newInstance().newDocumentBuilder()
        Validator validator = null
        if (xsd != null) {
            SchemaFactory factory = SchemaFactory.newInstance(XMLConstants.W3C_XML_SCHEMA_NS_URI)
            Schema schema = factory.newSchema(new StreamSource(xsd))
            validator = schema.newValidator()
        } 
        Set<File> failures = [] as Set
        xmlFiles.forEach {
            Document document = null
            try {
                document = parser.parse(it)
            } catch (Exception e) {
                logger.error("Error parsing $it", e) 
                failures << it
            } 
            if (document && validator) {
                try {
                    validator.validate(new DOMSource(document))
                } catch (Exception e) {
                    logger.error("Error validating $it", e) 
                    failures << it
                } 
            } 
        }
        if (failures) throw new BuildException("xml validation failures $failures") 
    } 
}

Использование в build.gradle

task validateXml(type: XmlValidate) {
    xml ['foo.xml', 'bar.xml']
    xml fileTree(dir: 'src/main/resources/baz', include: '*.xml')
    xsd = file('path/to.xsd')
} 
...