g8 etorreborre/etorreborre/specs2-scala-2.10.g8
μλνμμμ€.
λ€μκ³Ό κ°μ μ€λ₯κ° λ°μν΄μΌ ν©λλ€.
action parse error; template context is [anonymous]
line 1:1: unexpected token: e1
at org.antlr.stringtemplate.language.ActionParser.primaryExpr(ActionParser.java:813)
at org.antlr.stringtemplate.language.ActionParser.expr(ActionParser.java:539)
at org.antlr.stringtemplate.language.ActionParser.templatesExpr(ActionParser.java:222)
at org.antlr.stringtemplate.language.ActionParser.action(ActionParser.java:126)
at org.antlr.stringtemplate.StringTemplate.parseAction(StringTemplate.java:876)
at org.antlr.stringtemplate.language.TemplateParser.action(TemplateParser.java:162)
at org.antlr.stringtemplate.language.TemplateParser.template(TemplateParser.java:127)
at org.antlr.stringtemplate.StringTemplate.breakTemplateIntoChunks(StringTemplate.java:850)
at org.antlr.stringtemplate.StringTemplate.setTemplate(StringTemplate.java:441)
at org.antlr.stringtemplate.StringTemplate.<init>(StringTemplate.java:308)
at org.antlr.stringtemplate.StringTemplate.<init>(StringTemplate.java:293)
at org.clapper.scalasti.adapter.ScalastiStringTemplate.<init>(ScalastiStringTemplate.java:57)
at org.clapper.scalasti.StringTemplate.<init>(StringTemplate.scala:101)
...
"$"κ° ν¬ν¨λ μ κ·μμ ν¬ν¨νλ νμΌμ λμΌν λ¬Έμ κ° μμ΅λλ€.
λλ $κ° μ΄μ€μΌμ΄ν λ μ μλ€κ³ μκ°νμ΅λλ€. \$ λ° $$μ(λ₯Ό) μλνμ§λ§ μ±κ³΅νμ§ λͺ»νμ΅λλ€.
μ΄ λ¬Έμ κ° ν΄κ²°λ λκΉμ§ λ΄ ννΈμλ ν΄κ²° λ°©λ²μ μ½λμ λ€μμ ν¬ν¨νλ κ²μ΄μμ΅λλ€.
// This is to work around a parsing issue in giter8 - replace inlined dollar signs
val DOLLAR = (0x24).toChar
κ·Έλ¦¬κ³ :
When("""^I retrieve the result""" + DOLLAR) { () =>
κ·Έκ²μ λν ν¬ν¨νλ HTML νμΌμ λν΄ μ€ν¨ν©λλ€ ...
$(function() {
λ€μκ³Ό κ°μ΄ μμ±νλλΌλ
\$(function() {
λ€νν μ΄λ²μλ ν΄κ²° λ°©λ²μ μ°Ύλ κ²λ κ°λ₯νμ΅λλ€.
jQuery(function() {
"$" νμμ μ νΈνμ§λ§.
λ€λ₯Έ ν΄κ²° λ°©λ²μ΄ μμ΅λλ€. default.properties
νμΌμμ dollar=$
μ μν©λλ€. κ·Έλ° λ€μ ν
νλ¦Ώμμ When("""^I retrieve the result""" + $dollar$)
.
λΉμ μ κ·Έκ²μ ν
μ€νΈ νμ΅λκΉ? default.properties
νμΌμ ꡬ문 λΆμνκ³ μ§λ¬Ένλ λμ unexpected char: '$'
μ€λ₯κ° λ°μν©λλ€.
κ·Έκ²μ νμ€ν μ μκ² ν¨κ³Όκ° μμμ§λ§ μ΅κ·Όμ μλνμ§ μμμ΅λλ€.
$"$"$
μ‘°ν©μ μ¬μ©νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.
μλ₯Ό λ€μ΄ μ€μΉΌλΌμμ:
s"$var" -> s"$"$"$var"
AngularJsμ© μλ°μ€ν¬λ¦½νΈ ν νλ¦Ώμ μ¬μ©νλ©΄ μλΉν 보기 νν΄μ§λλ€. Maven μμ±, checkstyle λ° scalastyle xmlκ³Ό ν¨κ».
νμλ varμ 곡백, μ€ λ°κΏ λ° var μ΄λ¦μμ μλ―Έκ° μλ λ¬Έμλ₯Ό ν¬ν¨ν μ μλ μμ ν $var$ ν¨ν΄μ μμΌλ‘ μ°ΎμμΌ ν©λλ€.
μμ μ¬νμ΄ μμΌλ©΄ {{ }}, <% %>, ?> λμ μ λ¬λ¬κ° μ΄μ€μΌμ΄νμ λν λΆνν μ νμΈ κ²μ²λΌ 보μ λλ€. μ리 νμμλ₯Ό μν μ₯μλ κ±°μ μμ§λ§ λ€λ₯Έ λ§₯λ½μμ μ μ¬μ μΌλ‘ λ§μ λμ΄ νμν©λλ€.
λν 보κ°λ λ¬Έμμ΄λ³΄λ€ λ μΌλ°μ μΈ λ¬Έμ μ΄κΈ° λλ¬Έμ μ λͺ©μ λ³κ²½ν κ²μ λλ€.
μ΄ λ¬Έμ λ₯Ό ν΄κ²°νκΈ° μν΄ ν
νλ¦Ώ μμ§μ λμμ λ³κ²½ν μ μμ§λ§
λͺ κ°μ§ κ°λ₯ν μ루μ
:
$
νμΆ : \$
λλ $$
. κ·Έλ¬λ μ΄κ²μ λ΄κ° λ¬μ±νκ³ μΆμ ν
νλ¦Ώμ λ
립μ μΌλ‘ κ°λ°νλ κ²μ νμ©νμ§ μμ΅λλ€.[a-zA-Z_-]
μ ννλ©΄ μΌλΆ κΈ°μ‘΄ ν
νλ¦Ώμ΄ μμλ μ μμΌλ©° μΌλΆ κ²½μ°μλ μλνμ§ μμ΅λλ€(μ: ν
νλ¦Ώμ println(s"$name_$foo")
κ° ν¬ν¨λ κ²½μ°).κ°μΈμ μΌλ‘ μ νμ μ΄μ€μΌμ΄νκ° μλ λ λ²μ§Έ μ루μ μ μ νΈν©λλ€.
Pamfletμμλ νμ \$
λ₯Ό μ¬μ©νμ¬ νμΆνμ΅λλ€. Pamfletμλ§ ν΄λΉλλ κ²μΈμ§ μλλ©΄ StringTemplateμ μ½κ°μ λ³κ²½ μ¬νμ΄ μλμ§ κΆκΈν©λλ€.
\$
λ μ μκ² ν¨κ³Όμ μ
λλ€.
μλ§λ μ΄κ²μ΄ λ΄κ° μ΄ λ¬Έμ μ Documentationμ νκ·Έν μ΄μ μΌ κ²μ
λλ€.
μ΄μ€μΌμ΄νμ λ¬Έμ λ μλ₯Ό λ€μ΄ ν νλ¦Ώμ λ³λλ‘ κ°λ°νκ³ μΆλ€λ κ²μ λλ€.
my-template.g8/src/main/g8/src/main/$package$/Main.scala
μμ±νκ³
my-template.g8/src/main/g8
λ΄λΆμ IDEA νλ‘μ νΈλ₯Ό μμ±νμ¬ νΈμ§νκ³ μ»΄νμΌν μ μμ΅λλ€.
κ·Έλ¬λ λ΄κ° μ°κ³ μΆλ€λ©΄ :
package $package$
object Main extends App {
val foo = "foo"
val bar = "bar"
println(s"\$foo\$bar") // I need to escape this
}
λ΄λΆ νλ‘μ νΈκ° μ λλ‘ μλνμ§ μμ΅λλ€. .gitignore
.idea
ν΄λλ λ§μ°¬κ°μ§μ
λλ€.
@foxmk μ¬κΈ°μ λ³΄κ³ λ κ²κ³Όλ μμ ν λ€λ₯Έ λ¬Έμ λΌκ³ μκ°ν©λλ€. Ericμ "μμ ꡬ문 λΆμ μ€λ₯, ν νλ¦Ώ 컨ν μ€νΈλ [μ΅λͺ ]"μ΄λΌκ³ λ³΄κ³ νμ΅λλ€.
μλ
νμΈμ, μ λ μ΅κ·Όμ giter8μ μ¬μ©νμ¬ λ¬΄μ보λ€λ μ¬λ°λ₯Έ 맀κ°λ³μλ‘ λ컀 컨ν
μ΄λλ₯Ό μμνλ μμ λͺ
λ Ήμ μ 곡νλ sh νμΌμ΄ μλ ν
νλ¦Ώμ λ§λ€λ €κ³ μλνμ΅λλ€. λ°λΌμ $VAR
μ μλ λ§μ νκ²½ λ³μκ° μμ΅λλ€.
$"$"$
λ λ μ΄μ μλνμ§ μμΌλ©° μμ λ€λ₯Έ μ루μ
λ μλνμ§ μμ΅λλ€. μ΄λ° νλ‘μ νΈμμ κ·Έλ° μμ΄μ λ¬Έμ λ₯Ό 보λ κ²μ μνκΉμ΄ μΌμ
λλ€.
λλ # 3μ΄ μ¬λ°λ₯Έ ν΄κ²°μ± μ΄λΌκ³ μκ°ν©λλ€.
κΈ°μ‘΄ μμ±μ μ°Ύκ³ μ μ μλ λ³μλ₯Ό 무μν©λλ€. κ·Έλ¬λ μ΅μν μ¬μ©μμκ² μ΄μ λν΄ μλ €μΌ ν©λλ€.
λͺ¨λ μ’ λ₯μ μ΄μ€μΌμ΄νλ₯Ό μ¬μ©νμ¬ μ 체 μμ€ μ½λλ₯Ό μ€μΌμν€λ κ²μ μ΄μΉμ λ§μ§ μμ΅λλ€.
μ΄κ²μ default.properties
νμΌμ΄ νμμ΄λ©° λͺ¨λ λ체 κ°λ₯ν μ΄λ¦κ³Ό ν΄λΉ κΈ°λ³Έκ°μ ν¬ν¨νλ€κ³ κ°μ ν©λλ€.
\$
μ΄μ€μΌμ΄ννλ©΄ Giter8 0.7.2λ₯Ό μ¬μ©ν΄μΌ νλ sbt 0.13.15μμ μλν©λλ€.
FWIW: sbt 0.13.16 sbt-giter8
0.9.0μ μ΄ λ¬Έμ κ° μμ΅λλ€. '$'μ(λ₯Ό) μ΄μ€μΌμ΄ν μ²λ¦¬νλ λ°©λ²μ μ μ μμ΅λλ€.
νμΈλ μ¬λ°λ₯Έ μ루μ μ΄ μλ κ² κ°μ΅λλ€(μ: build.propertiesμ μ§μ λ ν ν°μ΄ μμΌλ©΄ λ«λ λ¬λ¬λ₯Ό μ°ΎμΌλ €κ³ μλνμ§ λ§μμμ€). μ΄λ €μ΄ λ³κ²½μ λκΉ? κ·Έλ λ€λ©΄ μ΄λμμ κ·Έκ²μ λ§λ€ μ μμ΅λκΉ?
FWIW, \$
λ° $"$"$
atm, SBT 1.1.0 λ° Giter8 0.11.0-M2μμ μλνλ κ²μΌλ‘ 보μ
λλ€.
μ μλμ§ μμ λ³μμ λν μλ μ΄μ€μΌμ΄ν λλ λ«λ $ κΈ°νΈκ° λλ½λ κ²½μ°μ κ°μ΄ λ³΄λ€ μ§λ₯μ μΈ λμμ νλ κ²μ΄ μ’μ΅λλ€.
μλ νμΈμ, μ λ μ΅κ·Όμ giter8μ μ¬μ©νμ¬ λ¬΄μ보λ€λ μ¬λ°λ₯Έ 맀κ°λ³μλ‘ λ컀 컨ν μ΄λλ₯Ό μμνλ μμ λͺ λ Ήμ μ 곡νλ sh νμΌμ΄ μλ ν νλ¦Ώμ λ§λ€λ €κ³ μλνμ΅λλ€. λ°λΌμ
$VAR
μ μλ λ§μ νκ²½ λ³μκ° μμ΅λλ€.
λλ λ§ κ·Έλλ‘ μ¬κΈ°μμ ν΄κ²°ν μ μλ€κ³ μκ°ν©λλ€.
λ¬Έμ μ λͺ©μ΄ Parsing issue when having template files including interpolated strings
μ΄κ³ μμ μμ κ°μ΄ \$
μ κ°μ μ΄μ€μΌμ΄ν λ¬λ¬λ νμ¬ λ²μ 0.13.1
(μ€ν¬λ¦°μ· μ°Έμ‘°)μμ μλ²½νκ² μλνλ―λ‘ λ¨μ μ μΌν κ² κ°μ΅λλ€. μ΄ μΈλΆ μ¬νμ λ¬Έμμ μΆκ°νκ³ μμ΅λλ€. μ΅λν 빨리 PRμ μμ±νκ² μ΅λλ€.
κ°μ₯ μ μ©ν λκΈ
$"$"$
μ‘°ν©μ μ¬μ©νμ¬ μ΄ λ¬Έμ λ₯Ό ν΄κ²°ν μ μμ΅λλ€.μλ₯Ό λ€μ΄ μ€μΉΌλΌμμ:
s"$var" -> s"$"$"$var"