成人国产在线小视频_日韩寡妇人妻调教在线播放_色成人www永久在线观看_2018国产精品久久_亚洲欧美高清在线30p_亚洲少妇综合一区_黄色在线播放国产_亚洲另类技巧小说校园_国产主播xx日韩_a级毛片在线免费

資訊專欄INFORMATION COLUMN

SBT項目訪問構(gòu)建時間和GIT版本的方法

church / 2780人閱讀

摘要:需求是能夠查看當(dāng)前應(yīng)用對應(yīng)的是哪個源碼版本,什么時候編譯的,以確定某些錯誤是因為沒有部署新版本導(dǎo)致的,還是存在未解決。基本思路是在編譯之前,把構(gòu)建時間和版本寫入一個文本文件中,運行時由后臺代碼讀取,發(fā)送給前端。

需求是能夠查看當(dāng)前web應(yīng)用對應(yīng)的是哪個源碼版本,什么時候編譯的,以確定某些錯誤是因為沒有部署新版本導(dǎo)致的,還是存在未解決bug。

對sbt和scala不熟,所以這個方案可能很笨拙,但能解決問題。基本思路是在編譯之前,把構(gòu)建時間和GIT版本寫入一個文本文件中,運行時由后臺java代碼讀取,發(fā)送給前端。

sbt文件可以是.sbt后綴,也可以是.scala后綴,如果是.scala后綴,則限制很少,可以隨意做處理,但一般使用的是.sbt后綴文件。.sbt文件中只能寫函數(shù),所以把構(gòu)建信息寫入文件的操作都放在函數(shù)中。

在.sbt文件中添加以下內(nèi)容:

import java.text.SimpleDateFormat
import java.util.Date

...

//函數(shù)NowDate取當(dāng)前時間也就是構(gòu)建時間
def NowDate(): String = {
  val now: Date = new Date()
  val dateFormat: SimpleDateFormat = new SimpleDateFormat("yyyy-MM-dd HH:mm:ss")
  val date = dateFormat.format(now)
  return date
}

//取GIT的header并寫入public文件夾下的文本文件,同時也把構(gòu)建時間寫入另一個文本文件
def createGitHeaderFile(dir:String):sbt.File={
  val propFile = sourceDir("/public/data/gitv.txt")
  try{
    val h =Process("git rev-parse HEAD").lines.head
    IO.write(propFile, h)
  }catch{
    case ex:Exception => {
      ex.printStackTrace()
      IO.write(propFile, "ERROR_GET_GIT_HEADER_FAIL")
    }
  }

  val btFile = sourceDir("/public/data/buildtime.txt")
  val nowText = NowDate()
  IO.write(btFile, nowText)

  return file(s"${file(".").getAbsolutePath}/$dir")
}

//這樣寫其實只是為了把git版本header寫入文件public/data/gitv.txt
//這里指定額外的源文件路徑,可以調(diào)用函數(shù),所以利用這個機會調(diào)用上面定義的函數(shù),把構(gòu)建信息寫入
unmanagedSourceDirectories in Compile ++= Seq(
  createGitHeaderFile("/scala")
)

在web項目中的java文件讀取構(gòu)建信息,然后可以進行處理或者發(fā)送給前端

istr = env.resourceAsStream("public/data/gitv.txt");
if (istr.nonEmpty()){
    InputStream i=istr.get();

    BufferedReader reader = new BufferedReader(new InputStreamReader(i));
    try {
        String s = reader.readLine();
        if (s!=null){
            gitHeader=s;
        }
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("cannot read public/data/gitv.txt");
    }
}

istr = env.resourceAsStream("public/data/buildtime.txt");
if (istr.nonEmpty()){
    InputStream i=istr.get();

    BufferedReader reader = new BufferedReader(new InputStreamReader(i));
    try {
        String s = reader.readLine();
        if (s!=null){
            this.buildTime=s;
        }
    } catch (IOException e) {
        e.printStackTrace();
        System.out.println("cannot read public/data/buildtime.txt");
    }
}



文章版權(quán)歸作者所有,未經(jīng)允許請勿轉(zhuǎn)載,若此文章存在違規(guī)行為,您可以聯(lián)系管理員刪除。

轉(zhuǎn)載請注明本文地址:http://systransis.cn/yun/73811.html

相關(guān)文章

  • python 生成項目模板 用于打包

    安裝工具 pip install cookiecutter 獲取模板 cookiecutter https://github.com/audreyr/cookiecutter-pypackage.git 生成項目 timger-mac:scala_sbt_tool timger$ cookiecutter https://github.com/audreyr/cookiecutter...

    newtrek 評論0 收藏0
  • Play Framework升級到2.6.x填坑記錄

    摘要:為了使用最新的,升級到配置修改根據(jù)官網(wǎng)的升級指南,修改文件,更改插件版本號文件中,把和單獨加入。此文件為首頁的模板。推測可能是版本和版本的首頁模板不同,于是到官網(wǎng)下載版本的,找到并覆蓋項目的相應(yīng)文件。添加插件的語句至此,升級成功完成。 為了使用最新的Play WS Api,升級到play 2.6.21 1.配置修改 根據(jù)官網(wǎng)的升級指南,修改plugins.sbt文件,更改插件版本號:a...

    voidking 評論0 收藏0
  • mac 下新玩具

    摘要:為啥需要,因為能更快更方便的進行代碼提示與代碼補全,每個人的精力都是有限的,能打一個字母出來結(jié)果就絕對不打第二個。 tools zsh為啥需要zsh,因為能更快更方便的進行代碼提示與代碼補全,每個人的精力都是有限的,能打一個字母出來結(jié)果就絕對不打第二個。 plugins=(git brew mvn svn svn-fast-info sbt go pip zsh-syntax-high...

    canopus4u 評論0 收藏0

發(fā)表評論

0條評論

最新活動
閱讀需要支付1元查看
<