简体   繁体   English

如何通过在多项目构建中将其用作依赖项来访问sbt-plugin的子项目?

[英]How can I access sub-projects of an sbt-plugin by using it as dependency in a multi-project build?

I have an sbt plugin project that uses multi-project build. 我有一个使用多项目构建的sbt插件项目。 I would like to use this plugin as a dependency for the other sbt project and access sub-project of this sbt plugin. 我想使用这个插件作为其他sbt项目的依赖项并访问此sbt插件的子项目。 I have created a plugin and I added plugin to an sbt project, but i am not able to access sub-project of plugin there. 我创建了一个插件,我添加了一个sbt项目的插件,但我无法访问插件的子项目。

sbt-plugin SBT-插件

build.sbt build.sbt

name := "sbt-plugin"
sbtPlugin := true

val commonSettings = Seq(
    organization := "com.example",
    version := "1.0",
    scalaVersion := "2.11.7",
    javacOptions := Seq("-source", "1.8", "-target", "1.8"), 
    scalacOptions := Seq("-target:jvm-1.8", "-unchecked","-deprecation", "-encoding", "utf8")
   )

  lazy val root = (project in file("."))
                 .settings(commonSettings: _*)
                 .dependsOn(plugin)
                 .aggregate(plugin)

  lazy val plugin = (project in file("plugin"))
                 .settings(commonSettings: _*)
                 .settings(
                     name := "plugin" ,
                     mainClass in (Compile, run) := Some("com.example.Main")
    )

sbt-plugin\\plugin\\src\\main\\scala\\com\\example\\Main.scala SBT-插件\\插件\\ SRC \\主\\阶\\ COM \\示例\\ Main.scala

package com.example

object Main {
    def main(args: Array[String]){
        println("Hello from plugin in sbt-plugin");
    }
}

sbt-plugin\\plugin\\src\\main\\scala\\com\\example\\Hello.scala SBT-插件\\插件\\ SRC \\主\\阶\\ COM \\示例\\ Hello.scala

  package com.example

  // Sample code I would like to access from another sbt project
  object Hello {
     def show = println("Hello, world!")
  }

plugin-test 插件测试

plugin-test is an sbt project which i used to test sbt-plugin plugin-test是一个sbt项目,我用来测试sbt-plugin

plugin-test\\build.sbt 插件测试\\ build.sbt

name := """plugin-test"""

val commonSettings = Seq(
    version := "1.0",
    scalaVersion := "2.11.7",
    javacOptions := Seq("-source", "1.8", "-target", "1.8"), 
    scalacOptions := Seq("-target:jvm-1.8", "-unchecked", "-deprecation", "-encoding", "utf8"),
    libraryDependencies += "org.scalatest" %% "scalatest" % "2.2.4" % "test"    
)

lazy val root = (project in file("."))
               .settings(commonSettings: _*)
               .dependsOn(pluginpro)
               .aggregate(pluginpro)
               .settings(
                   mainClass in (Compile, run) := Some("com.exam.Test")
  )

lazy val pluginpro = (project in file("pluginpro"))
                   .settings(commonSettings: _*)
                   .settings(
                        libraryDependencies += "com.example" % "plugin_2.11" % "1.0"         
    )

plugin-test\\src\\main\\scala\\com\\exam\\Test.scala 插件测试的\\ src \\主\\斯卡拉\\ COM \\考试\\ Test.scala

  package com.exam

  object Test {
     def result = com.example.Hello.show()
  }

when i run plugin-test project from root it is running but with below mentioned log and i am not sure why is it showing this because according to me output would be only Hello, world! 当我从root运行插件测试项目时它正在运行,但是使用下面提到的日志,我不知道为什么它显示这个因为根据我输出将只有Hello, world!

background log: info: Running com.exam.Test
background log: debug: Waiting for threads to exit or System.exit to be called.
background log: debug: Waiting for thread run-main-0 to terminate.
background log: debug:   Classpath:
E:\Play\SBT Plugin\sbt demo1\plugin-test\target\scala-2.11\classes
E:\Play\SBT Plugin\sbt demo1\plugin-test\pluginpro\target\scala-2.11\classes
C:\Users\Jeetu\.ivy2\cache\org.scala-lang\scala-library\jars\scala-library-2.11.7.jar
C:\Users\Jeetu\.ivy2\local\com.example\plugin_2.11\1.0\jars\plugin_2.11.jar
Hello, world!
()
background log: debug:  Thread run-main-0 exited.
background log: debug: Interrupting remaining threads (should be all daemons).
background log: debug: Sandboxed run complete..
background log: debug: Exited with code 0  

When i try to run sub-project of sbt-plugin via pluginpro/run , it can't find main class. 当我尝试通过pluginpro/run sbt-plugin的pluginpro/run ,它无法找到主类。

 > pluginpro/run
[trace] Stack trace suppressed: run last pluginpro/compile:backgroundRun for the full output.
[error] (pluginpro/compile:backgroundRun) No main class detected.

i have created main class in sbt-plugin/plugin project. 我在sbt-plugin / plugin项目中创建了主类。 I performed publish-local and plugin/publish-local on both projects and the artifacts resolved correctly. 我在两个项目上执行了publish-local和plugin / publish-local,并正确解析了工件。

What am I missing here? 我在这里错过了什么?

我通过在pluginpro项目中的build.sbt中添加以下内容来解决它:

mainClass in (Compile, run) := Some("com.example.Main")         

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM