Gradle에서 소스 JAR을 구축하는 방법
저는 Gradle과 함께 구축된 오픈 소스 프로젝트를 진행하고 있습니다.IDE(IntelliJ IDEA)에 로드하여 프로젝트를 디버깅할 수 있는 (project)-sources.jar 파일을 생성하고 싶습니다.파일을 생성할 수 있다면 로딩하는 방법을 알고 있습니다.
프로젝트에 사용할 수 있는 Gradle 태스크를 검토했지만 소스 jar 파일을 생성하는 작업은 없습니다.
이 프로젝트의 소스 jar 파일을 생성하는 가장 쉬운 방법은 무엇입니까?
컴파일된 클래스 파일을 포함하는 jar 파일에 소스를 추가하는 것도 좋습니다.
task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives sourcesJar
archives javadocJar
}
Android를 사용하는 경우:
task sourcesJar(type: Jar) {
from android.sourceSets.main.java.srcDirs
classifier = 'sources'
}
task javadoc(type: Javadoc) {
source = android.sourceSets.main.java.srcDirs
classpath += project.files(android.getBootClasspath().join(File.pathSeparator))
}
task javadocJar(type: Jar, dependsOn: javadoc) {
classifier = 'javadoc'
from javadoc.destinationDir
}
artifacts {
archives javadocJar
archives sourcesJar
}
Gradle 6.0에서의 솔루션
를 사용하고 있는 것을 전제로java
/java-library
Gradle 6.0 이후를 사용하는 플러그인은sourcesJar
다음 구성을 사용하여 작업을 수행합니다.
java {
withSourcesJar()
// and/or analogously use “withJavadocJar()” to get a “javadocJar” task
}
를 추가로 사용하는 경우maven-publish
/ivy-publish
플러그 인(요즘 권장)이 있으면, 이 플러그 인도 퍼블리시 됩니다.*-sources.jar
주요 Java 문서와 함께 아티팩트를 제공합니다.
Gradle 문서도 참조해 주세요.
컴파일된 클래스 JAR 파일에 소스를 추가하고 싶은 경우(사용할 수 있는 경우도 있습니다) 충분히 쉽게 할 수 있습니다.빌드 파일에 다음 항목을 추가하십시오.이론적으로는 소스를 별도의 JAR에 배치하는 솔루션과 매우 유사하다는 것을 알 수 있습니다.
jar {
from sourceSets.main.allSource
}
다른 점은 sourcesJar 대신 "jar"로 발음하여 메인 JAR 파일에 추가하는 것입니다.
이것은 효과가 있을 것이다.
assemble.dependsOn 'propertyJar'
task propertyJar(type: Jar) {
archiveName = "myJarName.jar"
from('src/main/resources') {
include '**'
}}
사용 시:
- 그라들: 5 이상
java
그리고.maven-publish
플러그인
task sourceJar(type: Jar) {
from sourceSets.main.allJava
archiveClassifier = "sources"
}
publishing {
publications {
maven(MavenPublication) {
from components.java
artifact sourceJar
}
}
}
https://docs.gradle.org/current/dsl/org.gradle.api.publish.maven.MavenPublication.html
Kotlin DSL은 다음과 같습니다.
tasks {
val sourcesJar by creating(Jar::class) {
dependsOn(JavaPlugin.CLASSES_TASK_NAME)
classifier = "sources"
from(java.sourceSets["main"].allSource)
}
val javadocJar by creating(Jar::class) {
dependsOn(JavaPlugin.JAVADOC_TASK_NAME)
classifier = "javadoc"
from(java.docsDir)
}
artifacts {
add("archives", sourcesJar)
add("archives", javadocJar)
}
}
Kotlin DSL(build.gradle.kts)을 사용하여 Dokka(온라인 뷰)와 소스 JAR를 Android Kotlin 라이브러리에 포함시켰습니다.
plugins {
// ...
id("org.jetbrains.dokka") version "1.4.32"
id("maven-publish")
}
lateinit var sourcesArtifact: PublishArtifact
lateinit var javadocArtifact: PublishArtifact
tasks {
val sourcesJar by creating(Jar::class) {
archiveClassifier.set("sources")
from(android.sourceSets["main"].java.srcDirs)
}
val dokkaHtml by getting(org.jetbrains.dokka.gradle.DokkaTask::class)
val javadocJar by creating(Jar::class) {
dependsOn(dokkaHtml)
archiveClassifier.set("javadoc")
from(dokkaHtml.outputDirectory)
}
artifacts {
sourcesArtifact = archives(sourcesJar)
javadocArtifact = archives(javadocJar)
}
}
publishing {
// ...
publications {
create<MavenPublication>("MyPublication") {
from(components["release"])
artifact(sourcesArtifact)
artifact(javadocArtifact)
// ...
}
}
}
안드로이드:
task androidSourcesJar(type: Jar) {
getArchiveClassifier().set('sources')
from android.sourceSets.main.java.srcDirs//full sources
}
자바:
task sourcesJar(type: Jar, dependsOn: classes) {
getArchiveClassifier().set('sources')
from sourceSets.main.allSource
}
언급URL : https://stackoverflow.com/questions/11474729/how-to-build-sources-jar-with-gradle
'programing' 카테고리의 다른 글
목록에 중복 제거 (0) | 2022.09.30 |
---|---|
루프 내의 크로스 테이블 (0) | 2022.09.30 |
두 개의 컨테이너(nginx와 mariadb)를 사용하여 도커와 드루팔을 셋업하다 (0) | 2022.09.30 |
PHP에서 타임스탬프를 시간 전으로 변환하는 중(예: 1일 전, 2일 전)... (0) | 2022.09.30 |
두 타임스탬프 간의 MySql 차이(초) (0) | 2022.09.30 |