SBTプロジェクトアクセス構築時間とGITバージョンの方法
2464 ワード
必要なのは、現在のWebアプリケーションがどのソース・バージョンに対応しているのか、いつコンパイルされているのかを確認して、新しいバージョンが導入されていないためにエラーが発生したのか、解決されていないバグがあるのかを判断することです.
sbtとscalaに詳しくないので、この案は不器用かもしれませんが、問題を解決することができます.基本的な考え方は、コンパイル前に構築時間とGITバージョンをテキストファイルに書き込み、実行時にバックグラウンドjavaコードで読み取り、フロントエンドに送信することです.
sbtファイルは.sbt接尾辞でもよいし.scala接尾辞でもよいし.scala接尾辞であれば制限が少なく任意に処理できるが、一般的には.sbt接尾辞ファイルが用いられる.sbtファイルには関数しか書けないので、構築情報をファイルに書き込む操作はすべて関数に入れます.
.sbtファイルに次の内容を追加します.
Webプロジェクトのjavaファイルで構築情報を読み出し、処理したりフロントエンドに送信したりすることができます.
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");
}
}