Java程序来获取gradle构建文件中的版本号

Java程序来获取gradle构建文件中的版本号,java,regex,gradle,Java,Regex,Gradle,我正在编写一个小型java程序,它将解析Gradle构建文件以获得版本 需要java正则表达式模式来匹配Gradle构建文件中以版本“xxxxxxxxx”开头的行。 以下是Gradle构建内容示例,我需要提取“1.0-SNAPSHOT”版本详细信息 group 'com.shan.sample.gradle' version '1.0-SNAPSHOT' apply plugin: 'java' apply plugin: 'application' apply plugin: 'maven'

我正在编写一个小型java程序,它将解析Gradle构建文件以获得版本

需要java正则表达式模式来匹配Gradle构建文件中以版本“xxxxxxxxx”开头的行。 以下是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

我仍然建议逐行解析该文件,并选择该行的第二个单词,其中第一个单词是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));
        }
    }
}

我还不能发表评论,因此:

请注意,shakhawat答案可能会导致小的不匹配,它将与文件中的任何版本“123abc”匹配,因此,如果您有

somethingversion '456xyz'
version '123abc'
假设你只选第一个找到的匹配项,那么就选第一个。 要在某些方面解决此问题,您可以在正则表达式中添加^\s*,如下所示:

^\s*(version)\s*([A-Z0-9.'/-]+)
^匹配行的开头

\s匹配任何空白字符

*是贪婪匹配,因此在本例中它将继续匹配所有空白字符

所以,在版本号和版本号之间,以及行首和版本字符串之间,可以有尽可能多的空格,以防前面出现一些丢失的空格或类似的名称

此外,使用GradleAPI,您可以创建gradle simple gradle插件,该插件可以通过

project.version

您可以为每个项目申请,然后从外部运行它。

如何逐行读取文件,并从第一个索引中包含单词version的行中提取第二个单词。使用此regex?sversion'[^']*然后从Group1抓取文本看看这条线索是否有用:你没有说明你为什么需要它,所以我想分享这个……谢谢pushpesh?sversion'[^']*'worksJorge,要求一个web应用程序扫描gradle repos,提取版本并在数据库中存储构建细节。