본문 바로가기
JAVA

[VELOCITY] jar 파일을 실행할 때 리소스를 찾을 수 없음

by IT History 2023. 4. 26.
728x90
반응형

오류 : org.apache.velocity.exception.ResourceNotFoundException: Unable to find resource

 ** Velocity.java Templates 절대경로 지정하여 문서 생성하기

Velocity를 활용하여 문서를 생성 할때가 있는데, 이때 Template 위치를 프로젝트 위치가 아닌

다른 폴더 혹은 다른 경로에 지정하고 싶을때 ResourceNotFoundException을 마주 할때가 있다.

그때, 상대경로와 절대경로 지정을 할 수 있도록 조정 하는 옵션(?)이 있다.

그냥...아래를 참고하자!!

 

package test.common.util;

import java.io.StringWriter;
import java.util.Iterator;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;

public class VelocityUtil {
    private static final String TEMPL_ROOT_PATH = "test/templates/";
    private static VelocityEngine _engine = null;

    static
    {
        _engine = new VelocityEngine();
        _engine.setProperty("resource.loader", "class");
        _engine.setProperty(
            "class.resource.loader.class",
            "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"
        );

        try
        {
            _engine.init();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public static StringWriter evaluate(VelocityContext context ,String vmfile) throws Exception
    {
        return evaluate(context, vmfile, false);
    }

    public static StringWriter evaluate(VelocityContext context ,String vmfile ,boolean escape) throws Exception
    {

        StringWriter w = new StringWriter();
        Template _template = _engine.getTemplate(TEMPL_ROOT_PATH + vmfile,"KSC5601");
        _template.merge(context, w);

        return w;
    }
}
반응형
절대경로의 Templates의 파일 읽기
package test.common.util;

import java.io.StringWriter;
import java.util.Iterator;

import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.app.VelocityEngine;

import nexcore.framework.core.util.BaseUtils;

public class VelocityUtil {
    private static final String TEMPL_ROOT_PATH = "C:/workspace/templates";
    private static VelocityEngine _engine = null;

    static
    {
        _engine = new VelocityEngine();
        _engine.setProperty("resource.loader", "file,class,classpath"); // Resource 설정
        _engine.setProperty(
            "class.resource.loader.class",
            "org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader"
        );
        _engine.setProperty("file.resource.loader.path", TEMPL_ROOT_PATH); // Resource Path 설정

        try
        {
            _engine.init();
        }
        catch (Exception e)
        {
            e.printStackTrace();
        }
    }

    public static StringWriter evaluate(VelocityContext context ,String vmfile) throws Exception
    {
        return evaluate(context, vmfile, false);
    }

    public static StringWriter evaluate(VelocityContext context ,String vmfile ,boolean escape) throws Exception
    {

        StringWriter w = new StringWriter();
        Template _template = _engine.getTemplate(vmfile,"KSC5601"); // Template 파일 이름 읽기 ex) TestFile.tmp or TestFile.vm
        _template.merge(context, w);

        return w;
    }
}

 

*참고

https://issues.apache.org/jira/browse/VELOCITY-932

 

[VELOCITY-932] Resource not found when executing jar file, works fine in IDE - ASF JIRA

Hello, I have a simple maven project with 1 class file. The project works fine in eclipse but when creating a jar out of it and executing it, it runs into error of ResourceNotFound  SEVERE: ResourceManager : unable to find resource '\templates\welcomeLett

issues.apache.org

 

728x90
반응형

'JAVA' 카테고리의 다른 글

Java cacert 관련 이슈 PKIX path building failed:  (0) 2023.06.29
Array/Json 데이터 표현  (0) 2023.06.28
tomcat rtf파일 한글깨짐  (0) 2023.02.03
[번외] Windows10 가상데스크톱 활용  (0) 2022.12.23
JAVA 폴더 및 파일 삭제  (0) 2022.11.29

댓글