【发布时间】: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