Olá!
Estou trabalhando em uma ferramenta que gere código automático. Ouvi falar do Velocity e decidi usá-lo, pois a minha ferramenta terá como funcionalidade basica usar dados do DB para gerar um template HTML.
Baixei o Velocity Tools, instalei aqui e peguei uns exemplos de código em alguns tutoriais para testar. O que acontece é que eu consigo compilar normalmente pelo prompt de comando, mas quando eu mando executar tenho o seguinte erro:
C:\Users\Kamilla\Desktop\Teste>javac VelocityListProcess.java
Note: VelocityListProcess.java uses unchecked or unsafe operations.
Note: Recompile with -Xlint:unchecked for details.
C:\Users\Kamilla\Desktop\Teste>java VelocityListProcess
Exception in thread "main" java.lang.NoClassDefFoundError: VelocityListProcess
Caused by: java.lang.ClassNotFoundException: VelocityListProcess
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: VelocityListProcess. Program will exit.
Tentando executar de outra forma:
C:\Users\Kamilla\Desktop\Teste>java -cp . VelocityListProcess
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/velocity/c
ontext/Context
Caused by: java.lang.ClassNotFoundException: org.apache.velocity.context.Context
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: VelocityListProcess. Program will exit.
Compilando com o -Xlint:
1 error
C:\Users\Kamilla\Desktop\Teste>javac VelocityListProcess.java -Xlint:unchecked
VelocityListProcess.java:22: warning: [unchecked] unchecked call to add(E) as a
member of the raw type java.util.ArrayList
list.add("Item 1");
^
VelocityListProcess.java:23: warning: [unchecked] unchecked call to add(E) as a
member of the raw type java.util.ArrayList
list.add("Item 2");
^
VelocityListProcess.java:24: warning: [unchecked] unchecked call to add(E) as a
member of the raw type java.util.ArrayList
list.add("Item 3");
^
VelocityListProcess.java:25: warning: [unchecked] unchecked call to add(E) as a
member of the raw type java.util.ArrayList
list.add("Item 4");
^
VelocityListProcess.java:26: warning: [unchecked] unchecked call to add(E) as a
member of the raw type java.util.ArrayList
list.add("Item 5");
^
5 warnings
As configurações das variáveis de ambiente no Windows são as seguintes:
CLASSPATH: C:\Users\Kamilla\Desktop\ARPRO\Velocity\velocity-1.6.4\velocity-1.6.4\velocity-1.6.4-dep.jar
JAVA_HOME: C:\Program Files\Java\jdk1.6.0_14
Path: C:\Program Files\Java\jdk1.6.0_14\bin
E o código do tutorial:
Listagem dos itens de um ArrayList
Existem \$lista.size() itens na lista.
-------------------
#foreach (\$item in \$list)
\$item
#end
-------------------
import java.io.StringWriter;
import java.util.ArrayList;
import org.apache.velocity.*;
import org.apache.velocity.app.*;
public class VelocityListProcess
{
public static void main(String args[]) throws Exception
{
// inicializando o velocity
VelocityEngine ve = new VelocityEngine();
ve.init();
// criando o contexto que liga o java ao template
VelocityContext context = new VelocityContext();
// escolhendo o template
Template t = ve.getTemplate("template1.vm");
// variavel que sera acessada no template:
ArrayList list = new ArrayList();
list.add("Item 1");
list.add("Item 2");
list.add("Item 3");
list.add("Item 4");
list.add("Item 5");
// aqui! damos a variavel list para
// o contexto!
context.put("lista", list);
StringWriter writer = new StringWriter();
// mistura o contexto com o template
t.merge(context, writer);
System.out.println(writer.toString());
}
}
O que pode estar acontecendo? Não acredito que seja erro no código pois peguei de um tutorial aqui do GUJ…
Se puderem ajudar eu agradeço muito! Não achei muita coisa que indique como configurar o ambiente para usar o Velocity.
Compilando só um código simples tipo um Hello Word eu tenho isso:
C:\Users\Kamilla\Desktop\Teste>javac inicio.java -Xlint:unchecked
C:\Users\Kamilla\Desktop\Teste>java -cp . inicio
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/velocity/c
ontext/Context
Caused by: java.lang.ClassNotFoundException: org.apache.velocity.context.Context
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: inicio. Program will exit.
C:\Users\Kamilla\Desktop\Teste>java inicio
Exception in thread "main" java.lang.NoClassDefFoundError: inicio
Caused by: java.lang.ClassNotFoundException: inicio
at java.net.URLClassLoader$1.run(URLClassLoader.java:200)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:188)
at java.lang.ClassLoader.loadClass(ClassLoader.java:307)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:301)
at java.lang.ClassLoader.loadClass(ClassLoader.java:252)
at java.lang.ClassLoader.loadClassInternal(ClassLoader.java:320)
Could not find the main class: inicio. Program will exit.
Código:
Classe java:
import java.io.StringWriter;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;
public class Inicio
{
public static void main ( String[] args ) throws Exception
{
/*
* inicializando a engine Velocity
*/
VelocityEngine ve = new VelocityEngine();
ve.init();
/*
* pegando o arquivo template criado
*/
Template t = ve.getTemplate( "inicio.vm" );
/*
* criando um contexto e inserindo os dados
*/
VelocityContext context = new VelocityContext();
context.put( "nome", "Fernando Martin " );
/*
* renderizando o template
*/
StringWriter writer = new StringWriter();
t.merge( context, writer );
/*
* mostra o resultado
*/
System.out.println( writer.toString() );
}
}
Arquivo .vm:
Produzido por $nome
Não acho solução pra isso… =/