Конвертируйте мой код публикации Kotlin Maven в плагин Java Gradle - PullRequest
0 голосов
/ 09 мая 2018

это мой код kotlin, который я копирую на каждый gradle.build.kts

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

        }
    }
}

он компилируется, но, очевидно, не запускает исходный файл и двоичный файл в мой репозиторий при запуске. Как я могу исправить свой плагин так, чтобы он делал то же самое, что и мой код Kotlin?

1 Ответ

0 голосов
/ 10 мая 2018

хотя в ретроспективе это кажется очевидным, вот код, который делает то же самое.

@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" );
    }
}
...