Java-программа для получения номера версии в файле сборки Gradle - PullRequest
0 голосов
/ 18 января 2019

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

Требуется, чтобы шаблон регулярных выражений Java соответствовал строке, начинающейся с "version 'xxxxxxxxx'" в файле сборки Gradle. Ниже приведен пример содержимого сборки Gradle, и мне нужно извлечь детали версии "1.0-SNAPSHOT"

group 'com.shan.sample.gradle'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'application'
apply plugin: 'maven'

sourceCompatibility = 1.8


mainClassName = 'com.shan.sample.gradle.SampleProgram'

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

Ответы [ 2 ]

0 голосов
/ 18 января 2019

Я пока не могу оставлять комментарии так:

Имейте в виду, что ответ shakhawat может привести к небольшим несоответствиям, он будет соответствовать любой версии '123abc' в файле, поэтому в случае, если у вас есть

somethingversion '456xyz'
version '123abc'

это займет первое (если вы берете только первое найденное совпадение). Чтобы противостоять этому в некоторой части, вы можете добавить ^ \ s * в начале регулярного выражения, как это:

^\s*(version)\s*([A-Z0-9.'/-]+)

^ соответствует началу строки

\ s соответствует любому пробелу

* - жадное сопоставление, поэтому в этом случае оно будет продолжать сопоставлять все пробельные символы

так что вы можете иметь столько пробелов между версией и номером версии, а также между началом строки и строкой версии в случае некоторых потерянных пробелов или похожих имен, поставленных перед.

Кроме того, используя gradle API (https://docs.gradle.org/current/javadoc/org/gradle/api/Project.html), вы можете создать простой плагин gradle, который может сообщать о версии через

project.version

, который вы можете подать заявку на каждый проект, а затем запустить его извне.

0 голосов
/ 18 января 2019

Я бы все же рекомендовал разобрать файл по строке и выбрать второе слово в строке, где первое слово - version.

Однако, эта реализация ниже будет служить вашей цели в виде регулярных выражений. Регулярное выражение (version ) ([A-Z0-9.'/-]+) имеет две группы, первая из которых будет содержать слово version, а вторая группа - номер версии. Итак, просто получите номер версии.

import java.util.regex.Matcher;
import java.util.regex.Pattern;

public class Main {

    public static void main(String[] args) {

        String gradleFileContent = "group 'com.shan.sample.gradle'\n" +
                "version '1.0-SNAPSHOT'\n" +
                "\n" +
                "apply plugin: 'java'\n" +
                "apply plugin: 'application'\n" +
                "apply plugin: 'maven'\n" +
                "\n" +
                "sourceCompatibility = 1.8\n" +
                "\n" +
                "\n" +
                "mainClassName = 'com.shan.sample.gradle.SampleProgram'\n" +
                "\n" +
                "dependencies {\n" +
                "    testCompile group: 'junit', name: 'junit', version: '4.12'\n" +
                "}\n";

        Pattern p = Pattern.compile("(version )([A-Z0-9.'/-]+)");
        Matcher m = p.matcher(gradleFileContent);

        if (m.find()) {
            System.out.println(m.group(2));
        }
    }
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...