olarak tanımlayın Yuvalanmış uzantı nesnelerini tanımlamam gereken ilk Gradle eklentisini uygulamaya koyma noktasındayım. Kullanıcı Kılavuzu henüz bunu kapsamamaktadır. Geçen sene bu konuyla ilgili birkaç soru oldu, fakat okuduğumdan bir çözüm oluşturamıyorum. Yuvalanmış uzatma kutularını Gradle
Bu
ben yapabilmek için kullanıcı istiyorum buna inanıyoruz:yang {
yangFilesRootDir "src/main/resources/yang"
inspectDependencies true
generators {
generator { // line 25
generatorClassName "org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl"
outputDir "build/gen1"
}
generator {
generatorClassName "org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl"
outputDir "build/gen2"
}
}
}
şuna İlk rastgele bıçak şöyle ve bu henüz yakın bile değil eminim : Burada
public void apply(Project project) {
project.plugins.apply(JavaPlugin)
YangExtension yang = project.extensions.create(YANG_EXT, YangExtension)
project.yang.extensions.generators =
project.container(CodeGeneratorsContainer) {
println it
}
Uzantımın sınıfları şunlardır: şu anda bunu çalıştırdığınızda
class YangExtension {
CodeGeneratorsContainer generators
String yangFilesRootDir
String[] excludeFiles
boolean inspectDependencies
String yangFilesConfiguration
String generatorsConfiguration
}
public class CodeGeneratorsContainer {
Collection<CodeGenerator> generators
}
class CodeGenerator {
String generatorClassName
File outputBaseDir
Map additionalConfiguration
}
, aşağıdaki başarısız:
Caused by: java.lang.NullPointerException: Cannot get property 'name' on null object
at org.gradle.api.internal.DynamicPropertyNamer.determineName(DynamicPropertyNamer.groovy:36)
at org.gradle.api.internal.DefaultNamedDomainObjectCollection.add(DefaultNamedDomainObjectCollection.java:70)
at org.gradle.api.internal.AbstractNamedDomainObjectContainer.create(AbstractNamedDomainObjectContainer.java:58)
at org.gradle.api.internal.AbstractNamedDomainObjectContainer.create(AbstractNamedDomainObjectContainer.java:52)
at org.gradle.api.internal.NamedDomainObjectContainerConfigureDelegate._configure(NamedDomainObjectContainerConfigureDelegate.java:39)
at org.gradle.api.internal.ConfigureDelegate.invokeMethod(ConfigureDelegate.java:73)
at build_2a353qtggi869feteaqu2qgc3$_run_closure1_closure3.doCall(....\workspace2\YangUsingProject\build.gradle:25)
Ve eğer önemliyse, yapı betiğinde satır 25'i işaretledim.
Güncelleme:
çözümü entegre ettikten sonra bu gerekli kurulum bir özetidir. Bir "build.gradle" dosyasında
Numune yapısı:
yang {
yangFilesRootDir "src/main/resources/yang"
//excludeFiles "target.yang"
inspectDependencies true
generator {
generatorClassName = "org.opendaylight.yangtools.maven.sal.api.gen.plugin.CodeGeneratorImpl"
outputDir = "build/gen1"
}
generator {
generatorClassName = "org.opendaylight.yangtools.yang.unified.doc.generator.maven.DocumentationGeneratorImpl"
outputDir = "build/gen2"
}
}
Eklenti yöntemi "uygulamak":
public void apply(Project project) {
project.plugins.apply(JavaPlugin)
YangExtension yang = project.extensions.create(YANG_EXT, YangExtension, project)
YangGenerateTask task = project.task(YANG_GENERATE_TASK, type: YangGenerateTask)
project.afterEvaluate {
task.init(project, yang)
}
}
Uzatma sınıfı:
class YangExtension {
private Project project
Collection<CodeGenerator> generators
String yangFilesRootDir
String[] excludeFiles
boolean inspectDependencies
String yangFilesConfiguration
String generatorsConfiguration
YangExtension(Project project) {
this.project = project
}
CodeGenerator generator(Closure closure) {
def generator = project.configure(new CodeGenerator(), closure)
generators.add(generator)
return generator
}
}
Ve nihayet, CodeGenerator POGO:
class CodeGenerator {
String generatorClassName
String outputDir
Map additionalConfiguration
}
Java'ya nasıl dönüştürüleceğine dair herhangi bir referansınız var mı? Proje nesnesini uzantıya aktarmakta zorluk yaşıyorum. – zwebie