FC2ブログ

スポンサーサイト

上記の広告は1ヶ月以上更新のないブログに表示されています。
新しい記事を書く事で広告が消せます。

typesafe Config で自動コメント無しに中身を出力したいとき

typesafe Config で中身を出力で読み取った情報は、render()で表示できるけど、コメントが自動でついてしまう。
コメントを消したい場合は、ConfigRenderOptionsを使えばよい。

何も設定しない場合


■読み込ませたコンフィグ
a {
#test
b.1{
c=1 ,
e=2
}
b.2{
d=2
}
}


■ソース

object Test1 extends App{
val conf = ConfigFactory.parseFile(new File("C:/temp/application.conf"))
println(conf.root().render())
}


■出力
{
# C:/temp/application.conf: 1
"a" : {
# C:/temp/application.conf: 3-7
"b" : {
# C:/temp/application.conf: 3
# test
"1" : {
# C:/temp/application.conf: 4
"c" : 1,
# C:/temp/application.conf: 5
"e" : 2
},
# C:/temp/application.conf: 7
"2" : {
# C:/temp/application.conf: 8
"d" : 2
}
}
}
}


自動で付くコメント消す場合


■ソース
 ConfigRenderOptionsでOriginCommentsをfalseにする。

object Test1 extends App{
val conf = ConfigFactory.parseFile(new File("C:/temp/application.conf"))
val option = ConfigRenderOptions.defaults().setOriginComments(false);
println(conf.root().render())
}


■出力
{
"a" : {
"b" : {
# test
"1" : {
"c" : 1,
"e" : 2
},
"2" : {
"d" : 2
}
}
}
}


HOCON拡張ありにする場合


もう少し元の形に近づけるなら、setJson(HOCON拡張の使用有無)もfalseにする。

object Test1 extends App{
val conf = ConfigFactory.parseFile(new File("C:/temp/application.conf"))
val option = ConfigRenderOptions.defaults().setOriginComments(false).setJson(false);
println(conf.root().render())
}


■出力

a {
b {
# test
"1" {
c=1
e=2
}
"2" {
d=2
}
}
}


補足


 ConfigRenderOptionsは他に、
 ・自分で書いたコメントの表示・非表示 setComments
 ・フォーマットするか否か       setFormatted
の設定も可能。

詳細はJavaDoc参照
http://typesafehub.github.io/config/latest/api/com/typesafe/config/ConfigRenderOptions.html



以上。
スポンサーサイト

テーマ : ソフトウェア開発
ジャンル : コンピュータ

sbtのcompile時のエンコード関係エラー

■JavaのソースがUTF-8


JavaのソースコードをUTF-8で書いていた場合に発生。

H:\temp\scala>sbt compile
[info] Loading project definition from H:\temp\scala\project
[info] Set current project to Hello World (in build file:/H:/temp/scala/)
[info] Compiling 1 Java source to H:\temp\scala\target\scala-2.10\classes...
[error] H:\temp\scala\src\main\java\Test.java:3: エラー: この文字は、エンコーデ
ィングMS932にマップできません
[error] //繝?せ繝?
[error] ^
[error] H:\temp\scala\src\main\java\Test.java:3: エラー: この文字は、エンコーデ
ィングMS932にマップできません
[error] //繝?せ繝?
[error] ^
[error] エラー2個
[error] (compile:compile) javac returned nonzero exit code
[error] Total time: 1 s, completed 2014/11/07 23:56:02



対処方法


build.sbtに javacOptions ++= Seq("-encoding", "UTF-8") を加える。

name := "Hello World"

version := "1.0"

scalaVersion := "2.10.0"

scalacOptions ++= Seq("-encoding", "UTF-8")

javacOptions ++= Seq("-encoding", "UTF-8")

* 注意) 各行の間の空行は必要

なお、 javacOptions では、エンコード以外のjavacオプションも渡せる。


■scalaのソースがUTF-8ではない


scalaのソースコードをUTF-8以外で書いていた場合。
(scalacはデフォルトで UTF-8 )

H:\temp\scala>sbt compile
[info] Loading project definition from H:\temp\scala\project
[info] Set current project to Hello World (in build file:/H:/temp/scala/)
[info] Updating {file:/H:/temp/scala/}scala...
[info] Resolving org.scala-lang#scala-library;2.10.0 ...
[info] Resolving org.scala-lang#scala-compiler;2.10.0 ...
[info] Resolving org.scala-lang#scala-reflect;2.10.0 ...
[info] Resolving org.scala-lang#jline;2.10.0 ...
[info] Resolving org.fusesource.jansi#jansi;1.4 ...
[info] Done updating.
[info] Compiling 1 Scala source and 1 Java source to H:\temp\scala\target\scala-
2.10\classes...
[error] IO error while decoding H:\temp\scala\src\main\java\Test.java with windo
ws-31j
[error] Please try specifying another one using the -encoding option
[error] IO error while decoding H:\temp\scala\src\main\scala\Hello.scala with wi
ndows-31j
[error] Please try specifying another one using the -encoding option
[error] two errors found
[error] (compile:compile) Compilation failed
[error] Total time: 1 s, completed 2014/11/07 23:59:28



対処方法

build.sbt の scalacOptions ++= Seq("-encoding", "エンコード") でエンコードを指定する



■ファイルにUTF-8のBOMがある場合


Windowsのメモ帳でUTF-8で保存してしまったときなんかに発生する。
ソースファイルにUTF-8のBOMがあることが原因。

H:\temp\scala>sbt compile
[info] Loading project definition from H:\temp\scala\project
[info] Set current project to Hello World (in build file:/H:/temp/scala/)
[info] Compiling 1 Scala source to H:\temp\scala\target\scala-2.10\classes...
[error] H:\temp\scala\src\main\scala\Hello.scala:1: illegal character '\ufeff'
[error] ?object HelloWorld {
[error] ^
[error] one error found
[error] (compile:compile) Compilation failed
[error] Total time: 1 s, completed 2014/11/07 23:53:23



対処方法

BOMを削除すればよい。
簡単な方法としては、下記のような方法
・サクラエディタなどのエディタで開いて先頭部分を削除する。
・エンコードを変えていいなら、メモ帳で開いてSJISで保存しなおす。


■関連

sbtでjavaとscalaが混在したプロジェクトのjarを作成してみる
\65279 は不正な文字です というエラーが出た


以上。

テーマ : ソフトウェア開発
ジャンル : コンピュータ

sbtでjavaとscalaが混在したプロジェクトのjarを作成してみる

sbtでjavaとscalaが混在したプロジェクトのjarを作成してみる。

環境はWindows8.1

ほとんどの部分は下記を参考にさせていただいた。
Scala初心者の俺が「Hello World」する jar を作るまで

インストール


sbtを下記からダウンロード
http://www.scala-sbt.org/download.html

Windowsなのでmsiを使った。
msiは特に注意するところもなく、実行してウィザードを進めるだけでOK。

インストールが終わったら、コマンドプロンプトを起動し sbt を実行。
初回起動時には必要なファイルがいろいろダウンロードされるので、結構時間がかかる。

C:\Users\>sbt
Getting org.fusesource.jansi jansi 1.11 ...
downloading https://repo1.maven.org/maven2/org/fusesource/jansi/jansi/1.11/jansi
-1.11.jar ...
[SUCCESSFUL ] org.fusesource.jansi#jansi;1.11!jansi.jar (1735ms)
:: retrieving :: org.scala-sbt#boot-jansi
confs: [default]
1 artifacts copied, 0 already retrieved (111kB/15ms)
Getting org.scala-sbt sbt 0.13.6 ...
・・・中略・・・
confs: [default]
5 artifacts copied, 0 already retrieved (24459kB/43ms)
[info] Set current project to t (in build file:/C:/Users/t/)
>
> exit
C:\Users\>


起動が終わったら、exit で一旦抜ける。


Hellow world を実行する


任意の場所に build.sbt というファイルを作成。1行ごとに必ず空行を入れる必要あり。

name := "Hello World"

version := "1.0"

scalaVersion := "2.10.0"



build.sbt を作成したディレクトリにソースを置くために src\main\scala というディレクトリを作成する。

src\main\scala の下にHello.scala というファイル名でscala のコードを書く。
object HelloWorld {
def main(args: Array[String]) {
println("Hello World!")
}
}


実行してみる。

H:\temp\scala>sbt run
[info] Set current project to Hello World (in build file:/H:/temp/scala/)
[info] Updating {file:/H:/temp/scala/}scala...
[info] Resolving org.scala-lang#scala-library;2.10.0 ...
・・・中略・・・
[info] Compilation completed in 11.843 s
[info] Running HelloWorld
Hello World!
[success] Total time: 43 s, completed 2014/10/22 23:19:26

H:\temp\scala>


Running HelloWorldというメッセージの後に、Hellow World! が出力されればOK。

scalaのソースからjarを作る


sbt-assemblyを使ってjarを作る。
sbt-assemblyについては下記のREADME.mdを参照。
https://github.com/sbt/sbt-assembly

project/assembly.sbt というファイルを作り、下記を記載する。

addSbtPlugin("com.eed3si9n" % "sbt-assembly" % "0.11.2")



assembly.sbt というファイルを build.sbt と同じディレクトリ作成。
下の2行を追加する

import AssemblyKeys._

assemblySettings



実行。

H:\temp\scala>sbt assembly
[info] Loading project definition from H:\temp\scala\project
[info] Set current project to Hello World (in build file:/H:/temp/scala/)
[info] Including: scala-library-2.10.0.jar
[info] Checking every *.class/*.jar file's SHA-1.
[info] Merging files...
[warn] Merging 'META-INF\MANIFEST.MF' with strategy 'discard'
[warn] Strategy 'discard' was applied to a file
[info] SHA-1: 24c
[info] Packaging H:\temp\scala\target\scala-2.10\Hello World-assembly-1.0.jar ..
.
[info] Done packaging.
[success] Total time: 6 s, completed 2014/10/22 23:32:20



実行時のメッセージにも出ているが、作成されたJarはtarget\scala-2.10\ の下にできている。

作成したjar を実行。

H:\temp\scala>java -jar "target/scala-2.10/Hello World-assembly-1.0.jar"
Hello World!



Javaのソースも含めてjarを作る


Java ソースを追加する。

src\main\javaを作成。
その下に Test.java という名前で下記のソースを作成。

public class Test {
public static void print() {
System.out.println("Hello Java");
}
}


src\main\scala\Hello.scala を下記のように変更

object HelloWorld {
def main(args: Array[String]) {
//println("Hello World!")
Test.print()
}
}


コマンドプロンプトを管理者で起動して実行。

H:\temp\scala>sbt assembly
[info] Loading project definition from H:\temp\scala\project
[info] Set current project to Hello World (in build file:/H:/temp/scala/)
[info] Compiling 1 Scala source and 1 Java source to H:\temp\scala\target\scala-
2.10\classes...
[info] Including from cache: scala-library-2.10.0.jar
[info] Checking every *.class/*.jar file's SHA-1.
[info] Merging files...
[warn] Merging 'META-INF\MANIFEST.MF' with strategy 'discard'
[warn] Strategy 'discard' was applied to a file
[info] SHA-1:
[info] Packaging H:\temp\scala\target\scala-2.10\Hello World-assembly-1.0.jar ..
.
[info] Done packaging.
[success] Total time: 5 s, completed 2014/10/22 23:51:19

H:\temp\scala>


無事成功。

できた jar を実行。

H:\temp\scala>java -jar "target/scala-2.10/Hello World-assembly-1.0.jar"
Hello Java



ちゃんと、scalaからjavaを呼べている。
target\scala-2.10\classes を確認すると、javaのソースもscalaのソースもclassファイルが生成されている。


エラーと対処方法


scalaのみの時の sbt assembly で失敗


エラー

H:\temp\scala>sbt assembly
[info] Loading project definition from H:\temp\scala\project
[info] Updating {file:/H:/temp/scala/project/}scala-build...
・・・中略・・・
[info] Done updating.
H:\temp\scala\build.sbt:7: error: illegal start of simple expression
import AssemblyKeys._ // put this at the top of the file
^
[error] Error parsing expression. Ensure that there are no blank lines within a
setting.
Project loading failed: (r)etry, (q)uit, (l)ast, or (i)gnore? i
[warn] Ignoring load failure: no project loaded.
[error] Not a valid command: assembly
[error] assembly
[error]



対処

設定を記載しているファイルや、記載内容が間違えていないか確認する。
特に、sbt-assembly 0.9.1 では、 project/puglin.sbt やbuild.sbtを編集するように指示があるが、0.11.2 では project/assembly.sbt と assembly.sbt を編集するというように、バージョン間で差異がある。

使用するバージョンのREADMEを参照すること。
sbt-assemblyのREADMEは下記から参照可能。
https://github.com/sbt/sbt-assembly


javaを加えた時の sbt assembly で失敗


エラー

H:\temp\scala>sbt assembly
[info] Loading project definition from H:\temp\scala\project
[info] Set current project to Hello World (in build file:/H:/temp/scala/)
[info] Compiling 1 Java source to H:\temp\scala\target\scala-2.10\classes...
java.io.IOException: Cannot run program "javac": CreateProcess error=2, ?w?????t
?@?
at java.lang.ProcessBuilder.start(Unknown Source)
at sbt.SimpleProcessBuilder.run(ProcessImpl.scala:349)
at sbt.AbstractProcessBuilder.run(ProcessImpl.scala:128)
・・・中略・・・
at java.lang.Thread.run(Unknown Source)
[error] (compile:compile) java.io.IOException: Cannot run program "javac": Creat
eProcess error=2, ?w?????t?@?
[error] Total time: 0 s, completed 2014/10/22 23:38:42

H:\temp\scala>



対処

コマンドプロンプトを管理者で起動して実行する。

以上。

テーマ : ソフトウェア開発
ジャンル : コンピュータ

検索フォーム
プロフィール

takuan93

Author:takuan93
本ブログの説明書→「ReadMe」

管理者に連絡

カテゴリ
WiX (5)
Ant (1)
フリーエリア
最新記事
カウンター
カレンダー
08 | 2018/09 | 10
- - - - - - 1
2 3 4 5 6 7 8
9 10 11 12 13 14 15
16 17 18 19 20 21 22
23 24 25 26 27 28 29
30 - - - - - -
上記広告は1ヶ月以上更新のないブログに表示されています。新しい記事を書くことで広告を消せます。