maven
Publish SBT project to local directory
I am trying to publish some of my SBT projects on my personal webserver. As far as I know you usually export a SBT project as a Maven directory including a POM.xml, that contains the project definitions. As Brian Clapper pointed out, you can publish such a Maven repository by creating several configuration files and using sbt publish. In his tutorial, the repository is transferred via FTP. I want to push my Maven repository to the server manually so I have more control. Can you give me some hints, how to accomplish this?
I figured out how you can do this. This solution creates a local Ivy repository, which is compatible with Maven. You have to set the following values in your build.sbt: name := "project-name" organization := "org.example" version := "0.0.0" scalaVersion := "2.9.2" publishTo := Some(Resolver.file("file", new File("/path/to/your/releases")) After that, you can publish your release sbt publish This will print something like the following lines [info] Set current project to project-name (in build file:/path/to/your/project/) [info] Updating {file:/path/to/your/project/}default-2e51ea... [info] Packaging /path/to/your/project/target/scala-2.9.2/project-name_2.9.2-0.0.0-S NAPSHOT-sources.jar ... [info] Resolving org.scala-lang#scala-library;2.9.2 ... [info] Done packaging. [info] Done updating. [info] :: delivering :: org.example#project-name_2.9.2;0.0.0 :: 0.0.0 :: release :: Tue Jul 24 15:41:04 CEST 2012 [info] delivering ivy file to /path/to/your/project/target/scala-2.9.2/ivy-0.0.0.xml [info] Wrote /path/to/your/project/target/scala-2.9.2/project-name_2.9.2-0.0.0.pom [info] Packaging /path/to/your/project/target/scala-2.9.2/project-name_2.9.2-0.0.0.jar ... [info] Done packaging. [info] published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0.pom [info] published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0.jar [info] published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0-sources.jar [info] published project-name_2.9.2 to /path/to/your/releases/org/example/project-name_2.9.2/0.0.0-SNAPSHOT/project-name_2.9.2-0.0.0-javadoc.jar [success] Total time: 1 s, completed 24.07.2012 15:41:05 You can put the generated files on any web server (e.g. http://repo.example.org/) and use it in the build script of another project by adding the following lines to your build.sbt: resolvers += "Personal repository" at "http://repo.example.org/" libraryDependencies += "org.example" % "project-name" % "0.0.0" For more information, see SBT: Getting Started Library Dependencies and SBT: Publishing.
From sbt, you can use project myproject [myproject] $ publish-local Which will publish to your local ivy directory (usually ~/.ivy2/local). In the output you will see the paths of all the files: [info] Done packaging. [info] published myproject_2.9.1 to .../ivy2/...myproject.../poms/myproject_2.9.1.pom [info] published myproject_2.9.1 to .../ivy2/...myproject.../jars/myproject_2.9.1.jar [info] published myproject_2.9.1 to .../ivy2/...myproject.../srcs/myproject_2.9.1-sources.jar [info] published myproject_2.9.1 to .../ivy2/...myproject.../docs/myproject_2.9.1-javadoc.jar [info] published ivy to .../ivy2/...myproject.../ivys/ivy.xml Then you can grab those files and upload them to your ftp server. I would still recommend the approach described in the linked blogpost though. At least that's how we do it. Just a small note on storing credentials. Use the following sbt setting: val credentials = Credentials(Path.userHome / ".ivy2" / ".my-credentials") The credentials file will look like this: realm=Sonatype Nexus Repository Manager host=nexus.example.com user=deployment password=pass The credentials are the same you use for logging in to the Nexus web interface.
Related Links
jenkins maven setPerCoreThreadCount
Can't download artefacts from my nexus server
IntelliJ Error : “Cannot Resolve Symbol” in all maven dependencies
How do I properly configure h2 in OpenShift
Use Android Studio With Maven ONLY
Resolving transitive dependency
Maven Clean Fails on Linux Vagrant Shared Drive
How to properly mavenize grails project in Netbeans
OpenShift maven plugin
Serving GWT Dependency in .war Project
Getting an unexpected exception in NetBeans
Maven tomcat plugin - how to fail build if deployment fails
how to use maven command to deploy war package to local tomcat
VM Options missing for Maven Project
Create Symlink for dependencies in Maven assembly
Gradle - get jar and native lib from Maven (snapshots) repository