我正在尝试设置一个包含一些Velocity函数的Gradle项目 .
到目前为止,我有以下文件:
src/main/java/com/veltes/velotest.java:
package com.veltes;
import org.apache.velocity.app.VelocityEngine;
import org.apache.velocity.Template;
import org.apache.velocity.VelocityContext;
import org.apache.velocity.exception.MethodInvocationException;
import org.apache.velocity.exception.ParseErrorException;
import org.apache.velocity.exception.ResourceNotFoundException;
import org.apache.velocity.runtime.RuntimeConstants;
import org.apache.velocity.runtime.resource.loader.ClasspathResourceLoader;
import java.io.*;
public class velotest {
public static void main(String[] args) {
try {
VelocityEngine ve = new VelocityEngine();
ve.setProperty(RuntimeConstants.RESOURCE_LOADER, "classpath");
ve.setProperty("classpath.resource.loader.class", ClasspathResourceLoader.class.getName());
ve.init();
VelocityContext context = new VelocityContext();
context.put("name", "World");
Template t = ve.getTemplate("com/veltes/velotest.vm");
StringWriter writer = new StringWriter();
t.merge(context, writer);
System.out.println(writer.toString());
File logFile = new File("C:/users/xxxx/Desktop/velotest.html");
try {
writeFile(logFile, t, context);
}
catch (IOException io) {
}
} catch (Exception e) {
}
}
private static void writeFile(File logFile, Template t, VelocityContext context) throws IOException {
Writer logWriter;
logWriter = new BufferedWriter(new FileWriter(logFile));
try {
t.merge(context, logWriter);
}
catch (ResourceNotFoundException rnfe) {
}
catch (ParseErrorException pee) {
}
catch (MethodInvocationException mie) {
}
catch (Exception e) {
}
logWriter.flush();
logWriter.close();
}
}
build.gradle:
group 'velocitytest'
version '1.0-SNAPSHOT'
apply plugin: 'groovy'
apply plugin: 'java'
sourceCompatibility = 1.5
repositories {
mavenCentral()
mavenLocal()
}
dependencies {
compile 'org.codehaus.groovy:groovy-all:2.3.11'
testCompile group: 'junit', name: 'junit', version: '4.11'
compile 'velocity:velocity:1.4'
}
现在,当我运行 gradle assemble
和 gradle build
时一切都很好,但是当我尝试运行项目时(同样用于在build / libs /中运行构建的jar并运行IntelliJ中的velotest类),我收到以下错误:
org.apache.velocity中org.apache.velocity.runtime.RuntimeInstance . <init>(RuntimeInstance.java:183)中的线程“main”java.lang.NoClassDefFoundError:org / apache / commons / collections / ExtendedProperties中的异常 . com.VelocityEngine . (VelocityEngine.java:60)at com.veltes.velotest.main(velotest.java:23)at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java) :62)at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)at java.lang.reflect.Method.invoke(Method.java:497)at com.intellij.rt.execution.application.AppMain.main( AppMain.java:147)引起:java.lang.ClassNotFoundException:org.apache.commons.collections.ExtendedProperties at java.net.URLClassLoader.findClass(URLClassLoader.java:381)at java.lang.ClassLoader.loadClass(ClassLoader . java:424)at sun.misc.Launcher $ AppClassLoader.loadClass(Launcher.java:331)at java.lang.ClassLoader.loadClass(ClassLoader.java:357) . ..还有8个
在build / tmp /中没有jar有点奇怪
你们中有谁知道解决方案吗?
1 回答
如果您想要运行它,则需要创建一个可运行的jar .
您可以使用shadojar插件或扩展jar任务以将运行时deps打包到工件中 .
对于intelliJ问题:
然后运行
gradle idea
任务,这将刷新项目中的.iws .ipr .iml文件并同步类路径 . 或者,如果您使用intelliJ支持(这还不是理想的),请尝试在那里刷新它 . 我认为在2017.1.3版本中,gradle集成更好一些 .