【问题标题】:Convert my Kotlin Maven publishing code to a Java Gradle Plugin将我的 Kotlin Maven 发布代码转换为 Java Gradle 插件
【发布时间】:2018-05-09 02:01:20
【问题描述】:

这是我一直复制粘贴到每个 gradle.build.kts 的 kotlin 代码

System.getenv("JRS_S3_URI")?.let {
    val sourcesJar by tasks.creating(Jar::class) {
        classifier = "sources"
        from(java.sourceSets["main"].allSource)
    }

    publishing {
        repositories {
            maven {
                url = uri(it)
                credentials(AwsCredentials::class.java) {
                    accessKey = System.getenv("JRS_ACCESSKEYID")
                    secretKey = System.getenv("JRS_SECRETACCESSKEY")
                }
            }
        }
        (publications) {
            "mavenJava"(MavenPublication::class) {
                from(components["java"])
                artifact(sourcesJar)
            }
        }
    }
}

这就是我迄今为止想出的明智的插件

public class Maven extends SourceSetConfiguredPlugin {

    public Maven( XenoExtension extension ) {
        super( extension );
    }


    @Override
    public void apply( Project project ) {
        if ( System.getenv( "JRS_S3_URI" ) != null ) {
            project.getPluginManager().apply( MavenPublishPlugin.class );
            TaskContainer tasks = project.getTasks();
            Jar sourceSet = tasks.create( "sources", Jar.class, task -> {
                getSourceSets().stream()
                        .map( SourceSet::getAllSource )
                        .map( sds -> project.copySpec().from( sds ) )
                        .forEach( copySpec -> task.include( copySpec.getIncludes() ) );
            } );

            tasks.withType( PublishToMavenRepository.class, task -> {
                task.getRepository().setUrl( URI.create( System.getenv( "JRS_S3_URI" ) ) );
                task.getRepository().credentials( AwsCredentials.class, creds -> {
                    creds.setAccessKey( System.getenv( "JRS_ACCESSKEYID" ) );
                    creds.setSecretKey( System.getenv( "JRS_SECRETACCESSKEY" ) );
                } );
                MavenPublication publication = task.getPublication();
                publication.artifact( project.getComponents() );
                publication.artifact( sourceSet );
            } );

        }
    }
}

它可以编译,但显然不会在运行时将源代码和二进制 jar 推送到我的存储库。如何更正我的插件,使其与我的 Kotlin 代码执行相同的操作?

【问题讨论】:

    标签: java gradle kotlin gradle-plugin


    【解决方案1】:

    虽然事后看来有点明显,但下面是做同样事情的代码。

    @Override
    public void apply( Project project ) {
        if ( System.getenv( "JRS_S3_URI" ) != null ) {
            log.info( "publishing to: {}", System.getenv( "JRS_S3_URI" ) );
            project.getPluginManager().apply( MavenPublishPlugin.class );
            TaskContainer tasks = project.getTasks();
            project.getExtensions().configure( PublishingExtension.class, ext -> {
                ext.repositories( repos -> {
                    repos.maven( repo -> {
                        repo.setUrl( URI.create( System.getenv( "JRS_S3_URI" ) ) );
                        repo.credentials( AwsCredentials.class, creds -> {
                            creds.setAccessKey( System.getenv( "JRS_ACCESSKEYID" ) );
                            creds.setSecretKey( System.getenv( "JRS_SECRETACCESSKEY" ) );
                        } );
                    } );
                } );
                ext.publications( pubs -> {
                    Jar sourceJar = tasks.create( "sources", Jar.class, task -> {
                        task.setClassifier( task.getName() );
                        getSourceSets().stream()
                                .map( SourceSet::getAllSource )
                                .forEach( task::from );
                    } );
    
                    pubs.create( "mavenJava", MavenPublication.class, pub -> {
                        pub.from( project.getComponents().getAt( "java" ) );
                        pub.artifact( sourceJar );
                    } );
                } );
            } );
        }
        else {
            log.info( "no repository to publish to defined" );
        }
    }
    

    【讨论】:

      猜你喜欢
      • 2020-12-27
      • 2018-01-17
      • 1970-01-01
      • 1970-01-01
      • 2021-08-22
      • 1970-01-01
      • 1970-01-01
      • 2020-04-30
      • 1970-01-01
      相关资源
      最近更新 更多