この質問は、Scala自体からScalaバージョンを取得するにはどうすればよいですか?に似ています。、Scala.jsもサポートしたい場合を除きます。
私はutil.Properties
アプローチを試みました。残念ながら、Scala.jsでは利用できません。
https://scalafiddle.io/sf/dzNAhWB/0
ScalaFiddle.scala:-5: ERROR: There were linking errors
Referring to non-existent class java.util.jar.Attributes$Name
called from scala.util.Properties$.()
called from ScalaFiddle$.()
exported to JavaScript with @JSExport
Referring to non-existent method java.util.Properties.load(java.io.InputStream)scala.Unit
called from scala.util.PropertiesTrait.$$anonfun$scalaProps$1(java.util.Properties,java.io.InputStream)scala.Unit
called from scala.util.Properties$.$$anonfun$scalaProps$1(java.util.Properties,java.io.InputStream)scala.Unit
called from scala.util.PropertiesTrait.scalaProps()java.util.Properties
called from scala.util.Properties$.scalaProps$lzycompute()java.util.Properties
called from scala.util.Properties$.scalaProps()java.util.Properties
called from scala.util.PropertiesTrait.scalaPropOrNone(java.lang.String)scala.Option
called from scala.util.Properties$.scalaPropOrNone(java.lang.String)scala.Option
called from scala.util.PropertiesTrait.$$init$()scala.Unit
called from scala.util.Properties$.()
called from ScalaFiddle$.()
exported to JavaScript with @JSExport
involving instantiated classes:
scala.util.Properties$
Referring to non-existent method java.lang.Class.getResourceAsStream(java.lang.String)java.io.InputStream
called from scala.util.PropertiesTrait.scalaProps()java.util.Properties
called from scala.util.Properties$.scalaProps$lzycompute()java.util.Properties
called from scala.util.Properties$.scalaProps()java.util.Properties
called from scala.util.PropertiesTrait.scalaPropOrNone(java.lang.String)scala.Option
called from scala.util.Properties$.scalaPropOrNone(java.lang.String)scala.Option
called from scala.util.PropertiesTrait.$$init$()scala.Unit
called from scala.util.Properties$.()
called from ScalaFiddle$.()
exported to JavaScript with @JSExport
involving instantiated classes:
scala.util.Properties$
Referring to non-existent method java.util.jar.Attributes$Name.(java.lang.String)
called from scala.util.Properties$.()
called from ScalaFiddle$.()
exported to JavaScript with @JSExport
では、すべてのScalaバックエンドの実行時にScalaバージョンを決定する方法は?
プラットフォームに依存しないソリューションは言うまでもなく、Scala.jsではそもそもそれを行う方法がないのではないかと思います。
できることは、ビルドツール(sbt?)に小さなタスクを記述して、情報をエンコードする小さなソースファイルを生成することです。
たとえば、ソースジェネレータに関するsbtドキュメントを言い換えます。
sourceGenerators in Compile += Def.task {
val file = (sourceManaged in Compile).value / "scalaversion" / "ScalaVersion.scala"
val scalaV = scalaVersion.value
IO.write(file,
s"""
object ScalaVersion {
val Full = "$scalaV"
}
""")
Seq(file)
}.taskValue
その後ScalaVersion.Full
、コードから読み取ることができます。
この記事はインターネットから収集されたものであり、転載の際にはソースを示してください。
侵害の場合は、連絡してください[email protected]
コメントを追加