Версия для печати темы
Нажмите сюда для просмотра этой темы в оригинальном формате
Форум программистов > Java EE (J2EE) и Spring > Отказывается работать Velocity


Автор: kaa 15.12.2007, 23:50
Есть код(пример с нашего сайта):

Код

import org.apache.velocity.app.*;
import org.apache.velocity.*;
import java.io.*;
import java.util.*;

public class VeloTest {
    
   public static void DoVelo(String file) throws Exception
    {
        Velocity.init();
        VelocityContext vc = new VelocityContext();
        Template t = Velocity.getTemplate(file);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        t.merge(vc, bw);
        bw.flush();
        bw.close();       
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)throws Exception
    {
        // TODO code application logic here
        DoVelo("test.vm");
    }



Velocity-1.5.jar подключаю как библиотеку.

При попытке стартовать вот что выдаёт:


Код

init:
deps-jar:
compile:
run:
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/collections/ExtendedProperties
        at org.apache.velocity.runtime.RuntimeInstance.<init>(RuntimeInstance.java:164)
        at org.apache.velocity.runtime.RuntimeSingleton.<clinit>(RuntimeSingleton.java:91)
        at org.apache.velocity.app.Velocity.init(Velocity.java:83)
        at VeloTest.DoVelo(VeloTest.java:10)
        at VeloTest.main(VeloTest.java:26)
Java Result: 1
BUILD SUCCESSFUL (total time: 1 second)



Среда разработки NetBeans 5.5
Среда исполнения JavaSE 6.0

Вот собственно... Кто-нить знает почиму такое может быть?

Автор: Kangaroo 16.12.2007, 00:40
kaa, нужен commons-collections.jar, его Велосити использует.

Автор: kaa 16.12.2007, 13:44
Kangaroo, 
А где его взять?

А подключать так же - как библиотеку?

Автор: Kangaroo 16.12.2007, 14:10
Цитата(kaa @  16.12.2007,  12:44 Найти цитируемый пост)
А где его взять?

Ну хотя бы в гугле набрать - http://www.google.com.ua/search?hl=ru&q=commons+collections+download&meta=


Цитата(kaa @  16.12.2007,  12:44 Найти цитируемый пост)
А подключать так же - как библиотеку? 

Да. Это обычная библиотека, которую внутри себя использует Velocity.

Автор: kaa 16.12.2007, 20:21
Kangaroo, 
Понял, спасибо smile

Автор: ivg 16.12.2007, 20:45
kaa, у velocity есть ещё файлик velocity-dep-1.5.jar Так вот в этом файле включены все зависимости (dependencies), в том числе и все commons, которые необходимы для работы. То есть, если у вас в проекте нет кода, который использует Apache commons, можно просто этот jar использовать.

Автор: kaa 18.12.2007, 23:40
ivg, 
Спасибо! Учту! 

Автор: kaa 19.12.2007, 23:30
Скачал commons-collections-3.2.jar, подключил, пытаюсь прописать 

Код

import org.apache.commons.collections;


А мне говарят что такого пакета не найдено :(

Почиму он невидит библиотеку?

Автор: Kangaroo 20.12.2007, 01:08
kaa, 
должен видеть smile вроде правильный пакет.
а какая ИДЕ?

а Велосити хоть заработал?

Автор: kaa 20.12.2007, 22:00
Так, с божьей помощью подключил правильно - в jar-файл собирается, но при запуске в режиме отладки выдаёт следующее

Код

init:
deps-jar:
compile:
20.12.2007 21:48:05 org.apache.velocity.runtime.log.JdkLogChute log
INFO: FileResourceLoader : adding path '.'
Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/commons/lang/StringUtils
        at org.apache.velocity.runtime.resource.ResourceManagerImpl.initialize(ResourceManagerImpl.java:165)
        at org.apache.velocity.runtime.RuntimeInstance.initializeResourceManager(RuntimeInstance.java:594)
        at org.apache.velocity.runtime.RuntimeInstance.init(RuntimeInstance.java:241)
        at org.apache.velocity.runtime.RuntimeSingleton.init(RuntimeSingleton.java:113)
        at org.apache.velocity.app.Velocity.init(Velocity.java:83)
        at VeloTest.DoVelo(VeloTest.java:11)
        at VeloTest.main(VeloTest.java:27)
ERROR: JDWP Unable to get JNI 1.2 environment, jvm->GetEnv() return code = -2
JDWP exit error AGENT_ERROR_NO_JNI_ENV(183):  [../../../src/share/back/util.c:820]
Java Result: 1
debug:
BUILD SUCCESSFUL (total time: 1 second)




Код

Код

import org.apache.velocity.app.*;
import org.apache.velocity.*;
import org.apache.commons.collections.*;
import java.io.*;
import java.util.*;

public class VeloTest {
    
   public static void DoVelo(String file) throws Exception
    {
        Velocity.init();
        VelocityContext vc = new VelocityContext();
        Template t = Velocity.getTemplate(file);
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));
        t.merge(vc, bw);
        bw.flush();
        System.out.println("ok");
        bw.close();       
    }
    
    /**
     * @param args the command line arguments
     */
    public static void main(String[] args)throws Exception
    {
        // TODO code application logic here
        DoVelo("test.vm");
    }
    
}


Как я понимаю, ему что-то ненравится в инициализации, только вот что - никак понять немогу.

Автор: Kangaroo 21.12.2007, 00:26
kaa, 
нужен еще commons-lang-2.2.jar smile 

Ты лучше сразу почитай в документации все dependencies.

Автор: kaa 21.12.2007, 23:47
Kangaroo, 
Гм... Да, что-то сразу недодумал про такое...
Стаарею smile

Автор: Zerstroer 4.10.2010, 13:29
Здравствуйте! 
Прошу помочь. Аналогичная ситуация.
Использую: IDE NetBeans 6.9.1, jdk 1.6, ОС Linux Debian 5.0.4
Предварительно проверил работоспособность Velocity

подключил 
Velocity 1.6.4 & Velocity 1.6.4-dep

Код

package velocheck;

import java.io.BufferedWriter;
import java.io.OutputStreamWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.Velocity;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;

/**
 *
 * @author evgen
 */
public class Main {

    /**
     * @param args the command line arguments
     */
    public static void main(String[] args) throws Exception {
        // TODO code application logic here
      try {
        Velocity.init("/home/evgen/NetBeansProjects/deos_i/src/java/velocity.properties");
        }
          catch( Exception e )
        {
            System.out.println(e);
        }

        VelocityContext vc = new VelocityContext();
        vc.put("fio", "Вася Тапкин");
        Template t = null;
        try {
            t = Velocity.getTemplate("login.html", "utf-8");
        } catch (ResourceNotFoundException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (ParseErrorException ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        } catch (Exception ex) {
            Logger.getLogger(Main.class.getName()).log(Level.SEVERE, null, ex);
        }
        BufferedWriter bw = new BufferedWriter(new OutputStreamWriter(System.out));

        t.merge(vc, bw);

        bw.flush();

        bw.close();
    }
}



В консоль обработанный шаблон выкинул корректно.

После чего стал проверять функционал в проекте сервлета (Использую Apache Tomcat 6.0.26)

Код

package FirstP;

import java.io.IOException;
import java.io.PrintWriter;
import java.util.logging.Level;
import java.util.logging.Logger;
import javax.servlet.ServletException;
import javax.servlet.http.HttpServlet;
import javax.servlet.http.HttpServletRequest;
import javax.servlet.http.HttpServletResponse;
import org.apache.velocity.app.Velocity;
import org.apache.commons.collections.*;
import org.apache.commons.lang.*;
import org.apache.velocity.servlet.*;
import org.apache.velocity.io.*;
import org.apache.velocity.runtime.*;

public class First extends HttpServlet {
   
     private void draw(HttpServletResponse response/*, ArrayList<String> content*/)
    throws ServletException, IOException
    {
     //    Velocity.init();

        Velocity.init("/home/evgen/NetBeansProjects/TmplVelo/src/java/FirstP/props.properties");

        response.setContentType("text/html;charset=UTF-8");
        PrintWriter out = response.getWriter();
       out.println("<html>");
        out.println("<head>");
        out.println("<title></title>");
        out.println("</head>");
        out.println("<body>");
        out.println("Проверка!");
        out.println("</body>");
        out.println("</html>");
    }


    protected void processRequest(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException, Exception {
       draw(response);
    } 

    @Override
    protected void doGet(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (Exception ex) {
            Logger.getLogger(First.class.getName()).log(Level.SEVERE, null, ex);
        }
    } 

    @Override
    protected void doPost(HttpServletRequest request, HttpServletResponse response)
    throws ServletException, IOException {
        try {
            processRequest(request, response);
        } catch (Exception ex) {
            Logger.getLogger(First.class.getName()).log(Level.SEVERE, null, ex);
        }
    }

}


Ругается на init() опять же!
В консоль отладки кидает следующее:

Код

Using CATALINA_BASE:   /home/evgen/.netbeans/6.9/apache-tomcat-6.0.26_base
Using CATALINA_HOME:   /home/evgen/apache-tomcat-6.0.26
Using CATALINA_TMPDIR: /home/evgen/.netbeans/6.9/apache-tomcat-6.0.26_base/temp
Using JRE_HOME:        /home/evgen/JVM/jdk1.6.0_21
Using CLASSPATH:       /home/evgen/apache-tomcat-6.0.26/bin/bootstrap.jar
04.10.2010 16:18:55 org.apache.catalina.core.AprLifecycleListener init
INFO: The APR based Apache Tomcat Native library which allows optimal performance in production environments was not found on the java.library.path: /home/evgen/JVM/jdk1.6.0_21/jre/lib/i386/server:/home/evgen/JVM/jdk1.6.0_21/jre/lib/i386:/home/evgen/JVM/jdk1.6.0_21/jre/../lib/i386:/home/evgen/JVM/jdk1.6.0_21/jre/lib/i386/client:/home/evgen/JVM/jdk1.6.0_21/jre/lib/i386:/home/evgen/JVM/jdk1.6.0_21/jre/../lib/i386:/usr/java/packages/lib/i386:/lib:/usr/lib
04.10.2010 16:18:55 org.apache.coyote.http11.Http11Protocol init
INFO: Initializing Coyote HTTP/1.1 on http-8080
04.10.2010 16:18:55 org.apache.catalina.startup.Catalina load
INFO: Initialization processed in 1445 ms
04.10.2010 16:18:55 org.apache.catalina.core.StandardService start
INFO: Starting service Catalina
04.10.2010 16:18:55 org.apache.catalina.core.StandardEngine start
INFO: Starting Servlet Engine: Apache Tomcat/6.0.26
04.10.2010 16:18:55 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor FirstProbe.xml
04.10.2010 16:18:56 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor ROOT.xml
04.10.2010 16:18:56 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor manager.xml
04.10.2010 16:18:56 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor TmplVelo.xml
04.10.2010 16:18:56 org.apache.catalina.startup.HostConfig deployDescriptor
INFO: Deploying configuration descriptor deos_i.xml
04.10.2010 16:18:56 org.apache.coyote.http11.Http11Protocol start
INFO: Starting Coyote HTTP/1.1 on http-8080
04.10.2010 16:18:56 org.apache.jk.common.ChannelSocket init
INFO: JK: ajp13 listening on /0.0.0.0:8009
04.10.2010 16:18:57 org.apache.jk.server.JkMain start
INFO: Jk running ID=0 time=1/139  config=null
04.10.2010 16:18:57 org.apache.catalina.startup.Catalina start
INFO: Server startup in 1527 ms
04.10.2010 16:18:57 FirstP.First doGet
SEVERE: null
java.lang.RuntimeException: Uncompilable source code - unreported exception java.lang.Exception; must be caught or declared to be thrown
        at FirstP.First.draw(First.java:42)
        at FirstP.First.processRequest(First.java:62)
        at FirstP.First.doGet(First.java:77)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:617)
        at javax.servlet.http.HttpServlet.service(HttpServlet.java:717)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:290)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.netbeans.modules.web.monitor.server.MonitorFilter.doFilter(MonitorFilter.java:393)
        at org.apache.catalina.core.ApplicationFilterChain.internalDoFilter(ApplicationFilterChain.java:235)
        at org.apache.catalina.core.ApplicationFilterChain.doFilter(ApplicationFilterChain.java:206)
        at org.apache.catalina.core.StandardWrapperValve.invoke(StandardWrapperValve.java:233)
        at org.apache.catalina.core.StandardContextValve.invoke(StandardContextValve.java:191)
        at org.apache.catalina.core.StandardHostValve.invoke(StandardHostValve.java:127)
        at org.apache.catalina.valves.ErrorReportValve.invoke(ErrorReportValve.java:102)
        at org.apache.catalina.core.StandardEngineValve.invoke(StandardEngineValve.java:109)
        at org.apache.catalina.connector.CoyoteAdapter.service(CoyoteAdapter.java:298)
        at org.apache.coyote.http11.Http11Processor.process(Http11Processor.java:852)
        at org.apache.coyote.http11.Http11Protocol$Http11ConnectionHandler.process(Http11Protocol.java:588)
        at org.apache.tomcat.util.net.JIoEndpoint$Worker.run(JIoEndpoint.java:489)
        at java.lang.Thread.run(Thread.java:619)


Прошу помочь, ткнуть носом если, что недоглядел. 
С технологией сервлетов и шаблонизатором сталкиваюсь впервые.





Автор: Zerstroer 5.10.2010, 20:38
Нарвался на мануал, добавил в файл .properties строчку:

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

и все заработало!
Спасибо!

Powered by Invision Power Board (http://www.invisionboard.com)
© Invision Power Services (http://www.invisionpower.com)