I am trying to use Velocity in an apt annotation processing class (with Maven). On initializing Velocity
Properties vProps = new Properties();
vProps.load(this.getClass().getResourceAsStream("velocity.properties"));
mEngine = new VelocityEngine(vProps);
with the following velocity.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=.
Here is the apt debug trace
[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开发者_Python百科;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
I have got the following error
[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
But when I create a simple main method on a test class and launch it with eclipse, the engine initialize well and I don't have any error.
I put some additional information,
the maven pom.xml build section
<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>
I also try to follow in eclipse debug mode the execution and it appears that the
private static LogChute createLogChute(RuntimeServices rsvc) throws Exception
method do not consider org.apache.velocity.runtime.log.NullLogChute as an instance of LogChute interface (LogManager.class line 155 the test is false) and throw the VelocityException
Is Velocity compatible with maven and apt-maven-plugin ?
Your problem is that maven itself uses velocity and you get version conflicts.
I just resolved this for the maven-jxr-plugin. Have a look at the pom.xml in the source of that to see what versions of which components to use.
精彩评论