Wygeneruj klasę Java za pomocą wtyczki Gradle for Java

Chciałbym wygenerować klasę Java za pomocą zadania Gradle dla aJawa projekt, podobny do tego, jaki tworzy wtyczka dla AndroidaBuildConfig.java używającbuildConfig <String> notacja, np .:

android {
    ...

    buildTypes {
        final String PROVIDER_AUTHORITY_RELEASE = "public static final String PROVIDER_AUTHORITY = \"com.example.project.ContentProvider\";\n";
        final String PROVIDER_AUTHORITY_DEBUG = "public static final String PROVIDER_AUTHORITY = \"com.example.project.debug.ContentProvider\";\n";

        debug {
            ...
            buildConfig PROVIDER_AUTHORITY_DEBUG
        }

        release {
            ...
            buildConfig PROVIDER_AUTHORITY_RELEASE
        }
    }
}

Przypadek użycia polega na tym, że tworzę aplikację open source, która wymaga użycia klucza API i tajemnicy; Mam klucz i sekretgradle.properties który nie jest przypisany do mojego VCS.

Do tej pory mam to:

task generateSources {
    outputDir = file("$buildDir/../src/main/java/uk/co/ataulm/mijur/core/api")
    outputs.dir outputDir
    doFirst {
        outputDir.exists() || outputDir.mkdirs()

        String API_CLIENT_ID = "public static final String API_CLIENT_ID = \"<your imgur uk.co.ataulm.mijur.core.api client id>\";\n"
        String API_CLIENT_SECRET = "public static final String API_CLIENT_SECRET = \"<your imgur uk.co.ataulm.mijur.core.api client secret>\";\n"

        try {
            API_CLIENT_ID = "public static final String API_CLIENT_ID = \"" + apiClientId + "\";\n"
            API_CLIENT_SECRET = "public static final String API_CLIENT_SECRET = \"" + apiClientSecret + "\";\n"
        } catch (Exception e) {
            println "gradle.properties not set with apiClientId and/or apiClientSecret. API calls will not work.";
        }

        new File(outputDir, "ApiConstants.java").write("package uk.co.ataulm.mijur.core.api;\n\npublic class ApiConstants {\n" + "    " + API_CLIENT_ID + "    " + API_CLIENT_SECRET + "}")
    }
}

compileJava.source generateSources.outputs.files, sourceSets.main.java

i działa - generuje ten plik w określonej lokalizacji. Ale jest bardzo kruchy; jawne nadanie nazwy pakietowi jest podatne na błędy. Byłbym szczęśliwy, gdyby plik został wygenerowany w innym pakiecie (np. W katalogu głównymsrc/main/java) tak długo, jak mogę uzyskać do niego dostęp w Javie, używającMyGeneratedFile.MyConstant.

Doceń wszelkie pomysły (nawet jeśli są na innej ścieżce).

questionAnswers(2)

yourAnswerToTheQuestion