1
votes

I have "Common.scala" in project dir:

import sbt.Keys._
import sbt._

import bintray.BintrayKeys._

object Common {

  val commonSettings = Seq(
    organization := "com.github.kondaurovdev",
    scalaVersion := "2.11.8",
    scalacOptions ++= Seq("-unchecked", "-deprecation", "-feature"),
    publishLocal := (),
    parallelExecution := false
  )

  val doNotPublishSettings = Seq(
    publish := {},
    publishLocal := {}
  )

  def getPublishSettings(_version: String) = {

    if (_version.endsWith("-SNAPSHOT")) {
      {
        println("is snapshot!")
        Seq(
          publishTo := Some("Artifactory Realm" at "http://oss.jfrog.org/artifactory/oss-snapshot-local"),
          bintrayReleaseOnPublish := false,
          credentials := List(Path.userHome / ".bintray" / ".artifactory").filter(_.exists).map(Credentials(_))
        )
      }
    } else {
      {
        println("is release")
        Seq(
          bintrayOmitLicense := true,
          bintrayRepository := "maven",
          publishArtifact in Test := false,
          pomExtra :=
            <developers>
              <developer>
                <id>kondaurovdev</id>
                <name>Alexander Kondaurov</name>
                <email>[email protected]</email>
              </developer>
            </developers>
        )
      }
    } ++ Seq(
      licenses += ("MIT", url("http://opensource.org/licenses/MIT"))
    )
  }

  def myProject(name: String, _version: String = "0.1.1-SNAPSHOT", deps: Seq[ModuleID] = Seq(), settings: Seq[Def.SettingsDefinition] = Seq(), path: Option[String] = None): Project = {
    Project(name, file(path.getOrElse(name)))
      .settings(
        commonSettings ++
        getPublishSettings(_version)
      )
      .settings(
        libraryDependencies ++= deps,
        version := _version
      )
      .settings(
        settings: _*
      )
  }

}

And i have thus projects in "build.sbt":

lazy val snippets: Project = {

  Common.myProject("snippets", deps = Seq(
    Deps.specs2,
    Deps.Log.slf4j
  ))

}

When i try "snippets/publish" i get this errors:

> snippets/publish
[info] Wrote /Users/alexanderkondaurov/Projects/kondaurov/scala/snippets/target/scala-2.11/snippets_2.11-0.1-SNAPSHOT.pom
[info] :: delivering :: com.github.kondaurovdev#snippets_2.11;0.1-SNAPSHOT :: 0.1-SNAPSHOT :: integration :: Sat Jan 21 14:42:01 MSK 2017
[info]  delivering ivy file to /Users/alexanderkondaurov/Projects/kondaurov/scala/snippets/target/scala-2.11/ivy-0.1-SNAPSHOT.xml
[error] Unable to find credentials for [Artifactory Realm @ oss.jfrog.org].
[trace] Stack trace suppressed: run last snippets/*:bintrayEnsureLicenses for the full output.
[trace] Stack trace suppressed: run last snippets/*:publish for the full output.
[error] (snippets/*:bintrayEnsureLicenses) you must define at least one license for this project. Please choose one or more of
[error]  AFL-3.0, AGPL-V3, APL-1.0, APSL-2.0, Apache-1.0, Apache-1.1, Apache-2.0, Artistic-License-2.0, Attribution, BSD, BSD New, BSD Simplified, BSL-1.0, Bouncy-Castle, CA-TOSL-1.1, CDDL-1.0, CPAL-1.0, CPL-1.0, CPOL-1.02, CUAOFFICE-1.0, Codehaus, Day, Day-Addendum, ECL2, EUDATAGRID, EUPL-1.1, Eclipse-1.0, Eiffel-2.0, Entessa-1.0, Fair, Frameworx-1.0, GPL-2.0, GPL-2.0+CE, GPL-3.0, HSQLDB, Historical, IBMPL-1.0, IPAFont-1.0, ISC, IU-Extreme-1.1.1, JA-SIG, JSON, JTidy, LGPL-2.1, LGPL-3.0, Lucent-1.02, MIT, MPL-2.0, MS-PL, MS-RL, MirOS, Motosoto-0.9.1, Mozilla-1.1, Multics, NASA-1.3, NAUMEN, NOSL-3.0, NTP, Nethack, Nokia-1.0a, OCLC-2.0, OSL-3.0, Openfont-1.1, Opengroup, PHP-3.0, PostgreSQL, Public Domain, Public Domain - SUN, PythonPL, PythonSoftFoundation, QTPL-1.0, RPL-1.5, Real-1.0, RicohPL, SUNPublic-1.0, SimPL-2.0, Sleepycat, Sybase-1.0, TMate, Unlicense, UoI-NCSA, VovidaPL-1.0, W3C, WTFPL, Xnet, ZLIB, ZPL-2.0, wxWindows
[error] (snippets/*:publish) java.io.IOException: Access to URL http://oss.jfrog.org/artifactory/oss-snapshot-local/com/github/kondaurovdev/snippets_2.11/0.1-SNAPSHOT/snippets_2.11-0.1-SNAPSHOT.pom was refused by the server: Unauthorized
[error] Total time: 2 s, completed Jan 21, 2017 2:42:03 PM
> 

I don't get it why it complains about license, i've included MIT license.. I followed by this article: http://szimano.org/automatic-deployments-to-jfrog-oss-and-bintrayjcentermaven-central-via-travis-ci-from-sbt/

ADDED:

I fixed this license issue by moving "licenses += ("MIT", url("http://opensource.org/licenses/MIT"))" right after "credentials += ..."

now it look like:

Seq(
  publishTo := Some("Artifactory Realm" at "https://oss.jfrog.org/artifactory/oss-snapshot-local"),
  bintrayReleaseOnPublish := false,
  credentials := List(Path.userHome / ".bintray" / ".artifactory").filter(_.exists()).map(Credentials(_)),
  licenses += ("MIT", url("http://opensource.org/licenses/MIT"))
)

That's strange.. Credentials file looks like:

realm = Artifactory Realm
host = oss.jfrog.org
user = *********
password = ***********

And i understood that in order to upload snapshots package it has to be approved by making request to support service. They will create folder for your package. This procedure needs to be done for for every package, are you kidding guys?

I have an account here "https://oss.sonatype.org/". I've there namespace and can upload as many packages as i need, i've expected the same behaviour in OJO. I'm not making approve request to support service every time when i've new package

1

1 Answers

1
votes

Setting credentials in ~/.sbt/ is the way forward. Credentials can be in the build.sbt, however username, password is left in plaintext as well as ip address of repository sever.

To set credentials via a configuration file you can use:

credentials += Credentials(Path.userHome / ".sbt" / ".credentials")

This picks up credentials in a file called .credentials which is stored in my ~/.sbt/ dir.

To set credentials in the Credentials obj you can use something like:

credentials += Credentials("Artifactory Realm", "http://<ip>:<port>/artifactory/<repo-key>", "<username>", "<password>")

It's also important to make sure that publishTo has been set with the relevant resolver. An example of which is:

publishTo := Some("Artifactory Realm" at "http://<ip>:<port>/artifactory/<repo-key>

To configure a proxy. The following can be added to a file called repositories stored in ~/.sbt/. An example configuration may look like this:

[repositories]
local
my-ivy-proxy-releases: http://<host>:<port>/artifactory/<repo-key>/, [organization]/[module]/(scala_[scalaVersion]/)(sbt_[sbtVersion]/)[revision]/[type]s/[artifact](-[classifier]).[ext]
my-maven-proxy-releases: http://<host>:<port>/artifactory/<repo-key>/