2017-05-04 5 views
0

In diesem Maven-Archetyp, den ich erstelle, versuche ich einen String-Wert aus Velocity-Makro mit artifactId als Eingabe zu erhalten. Die zurückgegebene Zeichenfolge wird als Name der Klasse zugewiesen. Wenn die artifactId ein einzelnes Wort ist, setze ich den ersten Buchstaben groß. Wenn es eine Reihe von Zeichenfolgen ist, die mit . verbunden sind, nehme ich das letzte Wort und mache den ersten Großbuchstaben.So verketten Sie Strings mit Velocity Macro

#macro(capital $str) 
#if($str.contains(".")) 
#$str.substring($str.lastIndexOf('.')).substring(1,2).toUppercase()$str.substring($str.lastIndexOf('.')).substring(2) 
#else 
#$str.substring(0,1).toUppercase()$str.substring(1) 
#end 
#end 

#set($className = "#capital($artifactId)") 
#set($symbol_pound = '#') 
#set($symbol_dollar = '$') 
#set($symbol_escape = '\') 
package ${package}.client; 

public interface ${className} { 
    //... 
} 

ich installiert dann das Urbild mit mvn clean install. Doch in dem Projekt von diesem Urbild erzeugt wird, zeigt der Klassenname wie:

public interface #$str.substring(0,1).toUppercase()yapp 

Es scheint wie ‚$ str.substring (1) was correctly executed. However the first part $ str.substring (0,1) .toUppercase()` tat nicht arbeiten.

Was habe ich falsch gemacht?

Antwort

0

Ich glaube, Sie haben das Gehäuse der toUppercase Methode vermasselt.

Try

#$str.substring(0,1).toUppercase()$str.substring(1) 

mit

#$str.substring(0,1).toUpperCase()$str.substring(1) 
Wechsel