2016-07-27 74 views
0

我想在我的Scala v2.10應用程序中使用args4j Java庫。但是,我遇到了一些麻煩。作爲一個例子,我有一個類來存儲我的參數在Java中如下。Java庫Args4j和Scala之間的互操作2.10

public class MyArgs { 
@Option(name = "-i", usage = "file input", required = true) 
private String input; 

public String getInput() { return input; } 
} 

然後我有一個像下面這樣的Scala程序。

object TestArgs { 
def main(args: Array[String]): Unit = { 
    val myArgs = new MyArgs() 
    val cmdLineParser = new CmdLineParser() 
    try { 
    cmdLineParser.parseArgument(java.util.Arrays.asList(args: _*)) 
    } catch { 
    case e: Exception => { 
    System.err.println(e.getMessage) 
    } 
    } 
} 
} 

在的IntelliJ,我通過類似-i some/path/to/file.txt,但我不斷收到以下消息。

「-i」 不是一個有效的選項

上這是怎麼回事任何想法?

回答

1

您可以直接使用args4j Java庫;不過,我可以建議這個包裝庫。

Scala helper using args4j

此實現我的作品使用Scala的2.10,星火1.6

// import the Java args4j 
import org.kohsuke.args4j.Option 
// import the scala wrapper 
import OptionsHelper.optionsOrExit 
object SparkScalaTest { 
    def main(args: scala.Array[String]) { 
     // setupt the options 
     class MyOptions extends OptionsWithHelp { 
      @Option(name="--foo", aliases=Array("-f"), usage="foo bar", required=false) 
      var update: Boolean = false // this is the default value, since it is not required 
     } 
     //Parse arguments 
     val options = optionsOrExit(args, new MyOptions) 

     sc.stop 
    } 
}