sbt PublishLocal to ivy2, for use by Gradle/Intellij

738 views Asked by At

I publishLocal a jar with sbt. The jar is produced in a local file at a reasonable path based on build.sbt configuration as follows:

name := "Utilities One"                                                         

organization := "com.cosi"                                                      

scalaVersion := 2.11.6"                                                        

version := "0.2"                                                                

This creates the jar at: /home/bill/.ivy2/local/com.cosi/utilities-one_2.11/0.2/jars/utilities-one_2.11.jar

My build.gradle points to the ivy repo, and additionally names the dependency as follows:

dependencies {
    compile 'com.cosi:utilities-one_2.11:0.2@jar'
}

This causes the gradle process to seek the jar at the path /home/bill/.ivy2/local/com.cosi/utilities-one_2.11/0.2/utilities-one_2.11-0.2.jar

I work around the incompatibility in path construction by manually creating a symbolic link, and the project builds (for Android) successfully.

But I would like to eliminate the need for the symbolic link by either adjusting the build.sbt or the gradle.sbt or both. Is it possible, and what would be best practice?

2

There are 2 answers

2
Bill Michaelson On

Well, the simpler solution is embarrassingly obvious, but still unsatisfying:

compile files('/home/bill/.ivy2/local/com.cosi/utilities-one_2.11/0.2/jars/utilities-one_2.11.jar')

That is, merely change the Gradle reference type to file instead of ivy, since it is a local file. Maybe sbt and gradle and ivy weren't meant to play together.

0
marcospereira On

You can instead use sbt publishM2 and add mavenLocal() to your gradle repositories:

repositories {
  mavenLocal()
}

publishM2 uses Maven repository layout and publishes to ~/.m2/repository which is the same directory used by mavenLocal().