2016-07-27 73 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 
    } 
}