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).