Не удалось инициализировать движок Velocity в классе apt-процессора - PullRequest
1 голос
/ 29 июля 2011

Я пытаюсь использовать Velocity в подходящем классе обработки аннотаций (с Maven). При инициализации скорости

Properties vProps = new Properties();
vProps.load(this.getClass().getResourceAsStream("velocity.properties"));
mEngine = new VelocityEngine(vProps);

со следующими speed.properties

runtime.log.logsystem.class=org.apache.velocity.runtime.log.NullLogChute

resource.loader=class
class.resource.loader.class=org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader
class.resource.loader.path=.

Вот подходящая трассировка отладки

[INFO] Processing 35 source files
[DEBUG] Invoking apt with arguments:
[DEBUG]   -classpath
[DEBUG]   D:\personal\depot\maven2\com\mycompany\portal\portal-annotations\1.0\portal-annotations-1.0.jar;D:\personal\depot\maven2\org\apache\velocity\velocity\1.7\velocity-1.7.jar;D:\personal\depot\maven2\commons-collections\commons-collections\3.2.1\commons-collections-3.2.1.jar;D:\personal\depot\maven2\commons-lang\commons-lang\2.4\commons-lang-2.4.jar;D:\personal\depot\maven2\org\codehaus\plexus\plexus-utils\1.4.6\plexus-utils-1.4.6.jar;D:\personal\depot\maven2\org\codehaus\plexus\plexus-compiler-api\1.5.2\plexus-compiler-api-1.5.2.jar;D:\personal\depot\maven2\asm\asm\3.2\asm-3.2.jar;D:\personal\depot\maven2\asm\asm-commons\3.2\asm-commons-3.2.jar;D:\personal\depot\maven2\asm\asm-tree\3.2\asm-tree-3.2.jar;D:\personal\workspaces\portal-pm\emc-disk-arrays\target\classes;D:\personal\depot\maven2\com\mycompany\library\wbem-client\1.0\wbem-client-1.0.jar;D:\personal\app\java\bmc_jdk1.5.0_10\jre\..\lib\tools.jar
[DEBUG]   -sourcepath
[DEBUG]   D:\personal\workspaces\portal-pm\emc-disk-arrays\src\main\java
[DEBUG]   -d
[DEBUG]   D:\personal\workspaces\portal-pm\emc-disk-arrays\target\generated-resources\apt
[DEBUG]   -nowarn
[DEBUG]   -encoding
[DEBUG]   ISO-8859-1
[DEBUG]   -verbose
[DEBUG]   -s
[DEBUG]   D:\personal\workspaces\portal-pm\emc-disk-arrays\target\generated-sources\apt
[DEBUG]   -nocompile
[DEBUG]   -factory
[DEBUG]   com.mycompany.portal.annotation.processing.MyAnnotationProcessorFactory

Я получил следующую ошибку

[WARNING] Problem encountered during annotation processing; 
[WARNING] see stacktrace below for more information.
[WARNING] org.apache.velocity.exception.VelocityException: Error initializing log: Failed to initialize an instance of org.apache.velocity.runtime.log.NullLogChute with the current runtime configuration.
[WARNING]   at org.apache.velocity.runtime.RuntimeInstance.initializeLog(RuntimeInstance.java:875)
[WARNING]   at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:262)
[WARNING]   at org.apache.velocity.app.VelocityEngine.init(VelocityEngine.java:93)
[WARNING]   at com.mycompany.portal.annotation.template.engine.Engine.<init>(Engine.java:26)
[WARNING]   at com.mycompany.portal.annotation.processing.MyAnnotationProcessor.createGeneratedFile(MyAnnotationProcessor.java:106)
[WARNING]   at com.mycompany.portal.annotation.processing.MyAnnotationProcessor.createGeneratedContent(MyAnnotationProcessor.java:95)
[WARNING]   at com.mycompany.portal.annotation.processing.MyAnnotationProcessor.process(MyAnnotationProcessor.java:75)
[WARNING]   at com.sun.mirror.apt.AnnotationProcessors$CompositeAnnotationProcessor.process(AnnotationProcessors.java:60)
[WARNING]   at com.sun.tools.apt.comp.Apt.main(Unknown Source)
[WARNING]   at com.sun.tools.apt.main.JavaCompiler.compile(Unknown Source)
[WARNING]   at com.sun.tools.apt.main.Main.compile(Unknown Source)
[WARNING]   at com.sun.tools.apt.main.Main.compile(Unknown Source)
[WARNING]   at com.sun.tools.apt.Main.processing(Unknown Source)
[WARNING]   at com.sun.tools.apt.Main.process(Unknown Source)
[WARNING]   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[WARNING]   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[WARNING]   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[WARNING]   at java.lang.reflect.Method.invoke(Method.java:585)
[WARNING]   at org.codehaus.mojo.apt.AptUtils.invoke(AptUtils.java:114)
[WARNING]   at org.codehaus.mojo.apt.AbstractAptMojo.executeApt(AbstractAptMojo.java:389)
[WARNING]   at org.codehaus.mojo.apt.AbstractAptMojo.executeImpl(AbstractAptMojo.java:263)
[WARNING]   at org.codehaus.mojo.apt.AbstractAptMojo.execute(AbstractAptMojo.java:240)
[WARNING]   at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
[WARNING]   at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
[WARNING]   at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
[WARNING]   at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
[WARNING]   at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
[WARNING]   at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
[WARNING]   at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
[WARNING]   at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
[WARNING]   at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
[WARNING]   at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
[WARNING]   at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
[WARNING]   at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
[WARNING]   at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
[WARNING]   at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
[WARNING]   at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39)
[WARNING]   at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25)
[WARNING]   at java.lang.reflect.Method.invoke(Method.java:585)
[WARNING]   at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
[WARNING]   at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
[WARNING]   at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
[WARNING]   at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
[WARNING] Caused by: org.apache.velocity.exception.VelocityException: Failed to initialize an instance of org.apache.velocity.runtime.log.NullLogChute with the current runtime configuration.
[WARNING]   at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:220)
[WARNING]   at org.apache.velocity.runtime.log.LogManager.updateLog(LogManager.java:269)
[WARNING]   at org.apache.velocity.runtime.RuntimeInstance.initializeLog(RuntimeInstance.java:871)
[WARNING]   ... 42 more
[WARNING] Caused by: org.apache.velocity.exception.VelocityException: The specified logger class org.apache.velocity.runtime.log.NullLogChute does not implement the org.apache.velocity.runtime.log.LogChute interface.
[WARNING]   at org.apache.velocity.runtime.log.LogManager.createLogChute(LogManager.java:181)
[WARNING]   ... 44 more
[DEBUG] Apt returned 4

Но когда я создаю простой метод main в тестовом классе и запускаю его с помощью eclipse, двигатель хорошо инициализируется, и у меня * не возникает никаких ошибок.

Я положил некоторую дополнительную информацию,

maven pom.xml сборка

<plugin>
  <groupId>org.codehaus.mojo</groupId>
  <artifactId>apt-maven-plugin</artifactId>
  <version>1.0-alpha-4</version>
  <executions>
    <execution>
      <goals>
        <goal>process</goal>
      </goals>
    </execution>
  </executions>
  <configuration>
    <verbose>true</verbose>
    <factory>com.mycompany.portal.annotation.processing.MyAnnotationProcessorFactory</factory>
  </configuration>
  <dependencies>
    <dependency>
      <!-- The maven artifact containing the Engine class -->
      <groupId>com.mycompany.portal</groupId>
      <artifactId>portal-annotations</artifactId>
      <version>1.0</version>
    </dependency>
    <dependency>
      <groupId>org.apache.velocity</groupId>
      <artifactId>velocity</artifactId>
      <version>1.7</version>
    </dependency>
  </dependencies>
</plugin>

Я также пытаюсь проследить в режиме отладки затмения выполнение, и кажется, что

private static LogChute createLogChute(RuntimeServices rsvc) throws Exception

метод не рассматривает org.apache.velocity.runtime.log.NullLogChute как экземпляр LogChute интерфейса (строка 155 LogManager.class, тест ложный) и выдает VelocityException

Совместимо ли Velocity с maven и apt-maven-plugin?

1 Ответ

1 голос
/ 29 июля 2011

Ваша проблема в том, что сам maven использует скорость, и вы получаете конфликт версий.

Я только что решил это для maven-jxr-plugin. Взгляните на pom.xml в источнике, чтобы узнать, какие версии каких компонентов использовать.

...