用eclipse+maven为scala编写的源程序打jar包

2017-09-11  本文已影响0人  yandaxin

模仿开发者提供的Simple Examples of EasyML中单机filesplit示例,使用scala语言编写单机程序,读取文件中存储的矩阵,判断矩阵有几行,奇数行输出1,偶数行输出0,矩阵的格式为:
1,22,3,#
2,11,5,#
因此只需读取文件中的行,拼接成字符串,然后判断字符串中“#”的个数即可。 测试平台是在线版本:BDAStudio,以上为背景。

因为不想安装IDEA,而本地已有eclipse+maven,因此在eclipse中安装scala插件,通过maven打包jar包。

1.安装scala插件参考:小草君技术专栏
最后一步:run as -->maven build..-->Goals:clean scala:compile compile package来避免默认的Java编译。
因为导出的jar包在命令行中 java -jar xxx.jar,报错提示xxx.jar中没有主清单属性,经过 @小黑熊 提醒可能是打包方式出现错误。

2.修改pom.xml来规避上述错误,参考博客:Defonds 的专栏,最终解决了问题,java -jar xxx.jar不再报错。

3.上传到在线平台BDAStudio,CMD语句为java -cp xxx.jar checkmatrixrow
因为是单机版程序所以CMD头是Java,分布式程序CMD头为Spark。checkmatrixrow是jar包中checkmatrixrow.class 文件所在的路径+文件名,因为我的checkmatrixrow.class就在jar包的第一层,所以只有文件名。

提交成功 因为矩阵行数是偶数,后台输出 0

最后附上写的第一个scala程序源码,配合EML平台使用,仅有一个输入in,即代码中的args(0),EML平台对每个program输入输出机制是第1个接口是args(0),第二个就是args(1),依次类推:

import scala.io.Source
import java.io._

object checkmatrixrow {
  def main(args:Array[String])  {

    //read operation
    var inmatrix=""
    val file=Source.fromFile(args(0))
    for(line <- file.getLines)
    {
      inmatrix+=line
    }
    file.close
    
    //matrix format like 1,2,3,#4,5,6,#
    //check the number of '#'

    var outflag=""
    var numberofchar = inmatrix.length-inmatrix.replace("#","").length
    if(numberofchar%2==0){
      print("0")
      outflag = "0"
    }else{
      print("1")
      outflag = "1"
    }
   
    //write operation
    //val writer = new PrintWriter(args(1))
    //writer.write(outflag)
    //writer.close()
  }
}
上一篇下一篇

猜你喜欢

热点阅读