mirror of https://github.com/sbt/sbt.git
69 lines
2.3 KiB
Scala
69 lines
2.3 KiB
Scala
package sbt
|
|
|
|
import java.nio.file.{ FileAlreadyExistsException, Files }
|
|
|
|
import sbt.Keys.*
|
|
import sbt.internal.librarymanagement.IvyXml
|
|
|
|
/** This local plugin provides ways of publishing just the binary jar. */
|
|
object PublishBinPlugin extends AutoPlugin {
|
|
override def trigger = allRequirements
|
|
|
|
object autoImport {
|
|
val publishLocalBin = taskKey[Unit]("")
|
|
val publishLocalBinConfig = taskKey[PublishConfiguration]("")
|
|
}
|
|
import autoImport.*
|
|
|
|
private val dummyDoc = taskKey[File]("").withRank(Int.MaxValue)
|
|
override val globalSettings = Seq(publishLocalBin := (()))
|
|
|
|
override val projectSettings: Seq[Def.Setting[?]] = Def settings (
|
|
publishLocalBin := Classpaths
|
|
.publishOrSkip(publishLocalBinConfig, publishLocalBin / skip)
|
|
.value,
|
|
publishLocalBinConfig := Classpaths.publishConfig(
|
|
false, // publishMavenStyle.value,
|
|
Classpaths.deliverPattern(crossTarget.value),
|
|
if (isSnapshot.value) "integration" else "release",
|
|
ivyConfigurations.value.map(c => ConfigRef(c.name)).toVector,
|
|
(publishLocalBin / packagedArtifacts).value.toVector,
|
|
(publishLocalBin / checksums).value.toVector,
|
|
logging = ivyLoggingLevel.value,
|
|
overwrite = isSnapshot.value
|
|
),
|
|
publishLocalBinConfig := publishLocalBinConfig
|
|
.dependsOn(
|
|
// Copied from sbt.internal.
|
|
Def.taskDyn {
|
|
val doGen = useCoursier.value
|
|
if (doGen)
|
|
Def.task {
|
|
val currentProject = {
|
|
val proj = csrProject.value
|
|
val publications = csrPublications.value
|
|
proj.withPublications(publications)
|
|
}
|
|
IvyXml.writeFiles(currentProject, None, ivySbt.value, streams.value.log)
|
|
}
|
|
else
|
|
Def.task(())
|
|
}
|
|
)
|
|
.value,
|
|
dummyDoc := {
|
|
val dummyFile = streams.value.cacheDirectory / "doc.jar"
|
|
try {
|
|
Files.createDirectories(dummyFile.toPath.getParent)
|
|
Files.createFile(dummyFile.toPath)
|
|
} catch { case _: FileAlreadyExistsException => }
|
|
dummyFile
|
|
},
|
|
dummyDoc / packagedArtifact := (Compile / packageDoc / artifact).value -> dummyDoc.value,
|
|
publishLocalBin / packagedArtifacts :=
|
|
Classpaths
|
|
.packaged(Seq(Compile / packageBin, Compile / packageSrc, makePom, dummyDoc))
|
|
.value
|
|
)
|
|
}
|