gpt4 book ai didi

java - 在 SBT/Play 中的构建定义中运行 Java 方法

转载 作者:行者123 更新时间:2023-11-30 09:12:59 28 4
gpt4 key购买 nike

我在 SBT 中想要的是有一个输入任务,对于 Play 2.2.1 控制台中的 foo a b c 调用传递 a b c 的 Java(静态)方法作为参数列表被执行。

PlayConsole:foo a b c ===should call===> Foo.bar(a,b,c)

我有以下 Play 目录结构和文件(Java 项目):

-myplayapp  
-app
-controllers
-views
-myfolder
Foo.java
-project
...
build.scala
...

我的文件夹.Foo

package myfolder;

public class Foo {
public static void bar(String... args) {
for(String s : args)
System.out.println(s);
}
}

project/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.

有没有办法做我想做的事?

最佳答案

由于您使用的是 sbt 0.13 support 附带的 Play 2.2.1,我将改用 build.sbt。您应该能够轻松地将其迁移到您的 ApplicationBuild,因为这些更改只是为了修饰

在Play应用的工程目录下创建build.sbt,内容如下:

import sbt.complete.Parsers._
import myfolder.Foo

lazy val foo = inputKey[Unit]("Foo you.")

foo := {
val args: Seq[String] = spaceDelimited("<arg>").parsed
Foo.bar(args: _*)
}

请注意,import 之间不需要换行,args 也需要使用 _* 扩展为可变参数。

Foo.java 中保存以下 project/src/main/java/myfolder 文件。

项目/src/main/java/myfolder/Foo.java

package myfolder;

public class Foo {
public static void bar(String... args) {
for(String s : args)
System.out.println(s);
}
}

请注意,由于您需要在构建定义中使用 Java 类(能够使用来自 SBT 的参数执行任务),它必须是 SBT 构建的一部分而不是您的 Play 项目(因此它位于 project - 参见 sbt is recursive)。

当 SBT shell 启动时,使用任意数量的参数运行 foo 输入任务:

[sbt-0-13-1]> foo2 ala ma kota
ala
ma
kota
[success] Total time: 0 s, completed Jan 21, 2014 12:00:46 AM

关于java - 在 SBT/Play 中的构建定义中运行 Java 方法,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/21221114/

28 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com