|
| 1 | +package sbt |
| 2 | + |
| 3 | +import java.nio.charset.StandardCharsets.UTF_8 |
| 4 | +import java.nio.file.{ FileAlreadyExistsException, Files } |
| 5 | + |
| 6 | +import org.apache.ivy.core.module.id.ModuleRevisionId |
| 7 | +import sbt.Keys._ |
| 8 | +import sbt.internal.librarymanagement.{ IvySbt, IvyXml } |
| 9 | + |
| 10 | +/** This local plugin provides ways of publishing just the binary jar. */ |
| 11 | +object PublishBinPlugin extends AutoPlugin { |
| 12 | + override def trigger = allRequirements |
| 13 | + |
| 14 | + object autoImport { |
| 15 | + val publishLocalBin = taskKey[Unit]("") |
| 16 | + val publishLocalBinConfig = taskKey[PublishConfiguration]("") |
| 17 | + } |
| 18 | + import autoImport._ |
| 19 | + |
| 20 | + private val dummyDoc = taskKey[File]("").withRank(Int.MaxValue) |
| 21 | + override val globalSettings = Seq(publishLocalBin := (())) |
| 22 | + |
| 23 | + override val projectSettings: Seq[Def.Setting[_]] = Def settings ( |
| 24 | + publishLocalBin := Classpaths.publishTask(publishLocalBinConfig).value, |
| 25 | + publishLocalBinConfig := Classpaths.publishConfig( |
| 26 | + false, // publishMavenStyle.value, |
| 27 | + Classpaths.deliverPattern(crossTarget.value), |
| 28 | + if (isSnapshot.value) "integration" else "release", |
| 29 | + ivyConfigurations.value.map(c => ConfigRef(c.name)).toVector, |
| 30 | + (publishLocalBin / packagedArtifacts).value.toVector, |
| 31 | + (publishLocalBin / checksums).value.toVector, |
| 32 | + logging = ivyLoggingLevel.value, |
| 33 | + overwrite = isSnapshot.value |
| 34 | + ), |
| 35 | + publishLocalBinConfig := publishLocalBinConfig |
| 36 | + .dependsOn( |
| 37 | + // Copied from sbt.internal. |
| 38 | + Def.taskDyn { |
| 39 | + val doGen = useCoursier.value |
| 40 | + if (doGen) |
| 41 | + Def.task { |
| 42 | + val currentProject = { |
| 43 | + val proj = csrProject.value |
| 44 | + val publications = csrPublications.value |
| 45 | + proj.withPublications(publications) |
| 46 | + } |
| 47 | + IvyXml.writeFiles(currentProject, None, ivySbt.value, streams.value.log) |
| 48 | + } else |
| 49 | + Def.task(()) |
| 50 | + } |
| 51 | + ) |
| 52 | + .value, |
| 53 | + dummyDoc := { |
| 54 | + val dummyFile = streams.value.cacheDirectory / "doc.jar" |
| 55 | + try { |
| 56 | + Files.createDirectories(dummyFile.toPath.getParent) |
| 57 | + Files.createFile(dummyFile.toPath) |
| 58 | + } catch { case _: FileAlreadyExistsException => } |
| 59 | + dummyFile |
| 60 | + }, |
| 61 | + dummyDoc / packagedArtifact := (Compile / packageDoc / artifact).value -> dummyDoc.value, |
| 62 | + publishLocalBin / packagedArtifacts := |
| 63 | + Classpaths |
| 64 | + .packaged(Seq(Compile / packageBin, Compile / packageSrc, makePom, dummyDoc)) |
| 65 | + .value |
| 66 | + ) |
| 67 | +} |
0 commit comments