Что я хочу в SBT - это задача ввода, которая для foo a b c
в консоли Play 2.2.1 вызовет метод Java (статический), передающий a b c
в виде списка аргументов выполняется.Запуск метода Java внутри определения сборки в SBT/Play
PlayConsole: foo a b c ===should call===> Foo.bar(a,b,c)
У меня есть следующая структура каталогов и файлов игры (проект Java):
-myplayapp
-app
-controllers
-views
-myfolder
Foo.java
-project
...
build.scala
...
myfolder.Foo
package myfolder;
public class Foo {
public static void bar(String... args) {
for(String s : args)
System.out.println(s);
}
}
проект/build.scala
import sbt._
import Keys._
import play.Project._
import sbt.complete.Parsers._
object ApplicationBuild extends Build {
val appName = "myplayapp"
val appVersion = "1.0-SNAPSHOT"
val appDependencies = Seq()
val foo = inputKey[Unit]("Foo you.")
val fooSettings = foo := {
val args: Seq[String] = spaceDelimited("<arg>").parsed
// Foo.bar(args)
}
val main = play.Project(appName, appVersion, appDependencies).settings(
fooSettings
)
}
Я пробовал import myfolder.Foo._
и import myfolder.Foo.bar
без каких-либо успехов. В обоих случаях ошибка одинакова:
not found: object myfolder.
Есть ли способ сделать то, что я хочу?
Проблема не с 'static'. Это прекрасно работает: 'import java.lang.String.format; format ("a% s c", "b") ' – senia
Почему бы вам не сделать scala-метод в build.scala? 'def foo (args: String *): Unit = args.foreach (println)' или что-то или любое выражение в этом отношении. –
Вы можете использовать шаги Setup, Cleanup на Compile, Test и т. Д. И подключить этот метод. –