乐趣区

SBT项目访问构建时间和GIT版本的方法

需求是能够查看当前 web 应用对应的是哪个源码版本,什么时候编译的,以确定某些错误是因为没有部署新版本导致的,还是存在未解决 bug。
对 sbt 和 scala 不熟,所以这个方案可能很笨拙,但能解决问题。基本思路是在编译之前,把构建时间和 GIT 版本写入一个文本文件中,运行时由后台 java 代码读取,发送给前端。
sbt 文件可以是.sbt 后缀,也可以是.scala 后缀,如果是.scala 后缀,则限制很少,可以随意做处理,但一般使用的是.sbt 后缀文件。.sbt 文件中只能写函数,所以把构建信息写入文件的操作都放在函数中。
在.sbt 文件中添加以下内容:
import java.text.SimpleDateFormat
import java.util.Date

// 函数 NowDate 取当前时间也就是构建时间
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 文件夹下的文本文件,同时也把构建时间写入另一个文本文件
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
// 这里指定额外的源文件路径,可以调用函数,所以利用这个机会调用上面定义的函数,把构建信息写入
unmanagedSourceDirectories in Compile ++= Seq(
createGitHeaderFile(“/scala”)
)

在 web 项目中的 java 文件读取构建信息,然后可以进行处理或者发送给前端
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”);
}
}

退出移动版