Ответ 1
Раздел необходимых свойств архетипа-метаданных xml используется для передачи дополнительных свойств в контекст скорости, не, предназначенный для передачи конфигурации двигателя скорости. Поэтому настройка свойства под названием userDirective приведет к тому, что переменная $userDirective будет доступна, а не добавит настраиваемую директиву к движку скорости.
Если вы видите исходный код, движок скорости, используемый плагином maven-archetype, не зависит от источника внешнего источника для его конфигурации. Код, который генерирует проект, опирается на реализацию проекта (VelocityComponent.
Это код, в котором инициализирован движок скорости:
public void initialize()
throws InitializationException
{
engine = new VelocityEngine();
// avoid "unable to find resource 'VM_global_library.vm' in any resource loader."
engine.setProperty( "velocimacro.library", "" );
engine.setProperty( RuntimeConstants.RUNTIME_LOG_LOGSYSTEM, this );
if ( properties != null )
{
for ( Enumeration e = properties.propertyNames(); e.hasMoreElements(); )
{
String key = e.nextElement().toString();
String value = properties.getProperty( key );
engine.setProperty( key, value );
getLogger().debug( "Setting property: " + key + " => '" + value + "'." );
}
}
try
{
engine.init();
}
catch ( Exception e )
{
throw new InitializationException( "Cannot start the velocity engine: ", e );
}
}
Существует хакерский способ добавления вашей настраиваемой директивы. Свойства, которые вы видите выше, считываются из файла components.xml в plexus-velocity-1.1.8.jar. Откройте этот файл и добавьте свойство конфигурации
<component-set>
<components>
<component>
<role>org.codehaus.plexus.velocity.VelocityComponent</role>
<role-hint>default</role-hint>
<implementation>org.codehaus.plexus.velocity.DefaultVelocityComponent</implementation>
<configuration>
<properties>
<property>
<name>resource.loader</name>
<value>classpath,site</value>
</property>
...
<property>
<name>userdirective</name>
<value>com.jlarge.HyphenatedToCamelCaseDirective</value>
</property>
</properties>
</configuration>
</component>
</components>
</component-set>
Затем добавьте свой настраиваемый файл класса директивы в эту банку и запустите файл archetype: generate.
Как вы видите, это очень фрагментировано, и вам нужно будет определить способ распространения этой взломанной банки сплетения. В зависимости от того, что вы планируете использовать для этого архетипа, это может стоить усилий.