2017-03-21 18 views
1

Ich versuche, einen benutzerdefinierten Archetyp in meinem lokalen Repo zu installieren. Wenn Benutzer ein Projekt basierend auf diesem Archetyp generieren, müssen sie die artifactId bereitstellen. Die meiste Zeit ist es in Kleinbuchstaben. Der Hauptklassenname (auch der Java-Dateiname) hängt jedoch von dieser artifactId mit dem ersten Großbuchstaben ab. Anstatt den Benutzer zur Eingabe einer anderen Variablen aufzufordern, möchte ich eine String-Methode aufrufen, um die artifactId in das korrekte Format für den Klassennamen zu konvertieren.Wie Java-Methoden in Maven-Archetyp XML aufgerufen werden

In Maven archetype: Modify artifactId, sieht aus wie Sie Java-Methode in Urbild-metadata.xml wie unten einbetten:

<requiredProperty key="artifactIdWithUnderscore" > 
    <defaultValue>${artifactId.replaceAll("-", "_")}</defaultValue> 
</requiredProperty> 

Also habe ich etwas ähnliches in meinem Urbild-metadata.xml ersten Brief an Kapital zu schlagen.

<requiredProperty key="artifactId" /> 
<requiredProperty key="serviceName"> 
    <defaultValue>${artifactId.toLowerCase().substring(0,1).toUpperCase()+actifactId.toLowerCase().substring(1)}</defaultValue> 
</requiredProperty> 

Allerdings habe ich die folgenden Parser-Fehler:

SEVERE: Parser Exception: serviceName 
org.apache.velocity.runtime.parser.ParseException: Encountered "+artifactId.toLowerCase().substring(1)}" at line 1, column 55. 
Was expecting one of: 
    "[" ... 
    "}" ... 

    at org.apache.velocity.runtime.parser.Parser.generateParseException(Parser.java:3679) 

Was richtiger Weg ist, Java String-Methode in diesem Urbild xml einfügen?

Antwort

0

Dies wird Großbuchstaben der ersten Brief.

<requiredProperty key="artifactId" /> 
    <requiredProperty key="serviceName"> 
     <defaultValue>${StringUtils.capitalize("artifactId")}</defaultValue> 
    </requiredProperty> 

Stellen Sie sicher, dass Apache commons Abhängigkeit enthalten haben.

<dependency> 
    <groupId>org.apache.commons</groupId> 
    <artifactId>commons-lang3</artifactId> 
    <version>3.5</version> 
</dependency> 
+0

Es funktioniert nicht. Ich habe den Abhängigkeitsblock in pom.xml hinzugefügt. Es hat jedoch nicht funktioniert. Alle 'serviceName's werden als' $ {StringUtils.capitalize ("artifactId")} 'explizit einschließlich Klassenname und Dateiname angezeigt. – ddd

+0

Was ist, wenn Sie versuchen org.apache.commons.lang3.StringUtils –

+0

Immer noch das Gleiche. – ddd

Verwandte Themen