Genera una clase Java usando el plugin Gradle para Java

Me gustaría generar una clase Java usando una tarea de Gradle para unaJava proyecto, similar a cómo crea el plugin de AndroidBuildConfig.java utilizando labuildConfig <String> notación, por ejemplo:

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
        }
    }
}

El caso de uso es que estoy desarrollando una aplicación de código abierto que requiere el uso de una clave API y un secreto; Tengo la llave y el secreto engradle.properties que no está comprometido con mi VCS.

Hasta ahora, tengo esto:

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

y funciona: genera ese archivo en la ubicación especificada. Pero es muy frágil; nombrar explícitamente el paquete es propenso a error. Me alegraría que el archivo se genere en algún otro paquete (por ejemplo, en la raíz delsrc/main/java) Mientras pueda acceder a ella en Java, usandoMyGeneratedFile.MyConstant.

Aprecie cualquier idea (incluso si están en un camino diferente).

Respuestas a la pregunta(2)

Su respuesta a la pregunta