2014-03-13 26 views
3

我是很新,摇篮和java所有..Java的sqlite的摇篮

我有使用SQLite一个项目,它贯穿IntelliJ IDEA的罚款,但我不能从终端运行它,它抛出例外:

java.lang.ClassNotFoundException: org.sqlite.JDBC 

我试图让过程,IntelliJ IDEA的滋生,当它运行的项目:

/usr/lib/jvm/java-7-openjdk-amd64/bin/java -agentlib:jdwp=transport=dt_socket,server=n,suspend=y,address=42986 -Dfile.encoding=UTF-8 -cp /home/user/my_project/target/classes/main:/home/user/my_project/target/resources/main:/home/user/.gradle/caches/modules-2/files-2.1/org.xerial/sqlite-jdbc/3.7.2/7a3d67f00508d3881650579f7f228c61bfc1b196/sqlite-jdbc-3.7.2.jar Main 

正如我在这里看到的想法指定的classpath这是解决方案,但我怎么能运行我的。项目的jar文件没有指定classpath?我的意思是可以gradle自动生成清单(因为它从maven org.xerial存储库成功地检索sqlite-jdbc)并将有效的类路径在那里? 我想从终端上顺利运行它。

UPD:我不能从终端运行只有gradle run命令,但我不能运行该项目java -jar myproject.jar

这里是我的build.gradle

apply plugin: 'java' 
apply plugin: 'maven' 
apply plugin: 'idea' 
apply plugin: 'application' 

group = 'myproject' 
version = '0.3' 

description = """my project description""" 

buildDir = "target" 

mainClassName = "Main" 

repositories { 
    maven { url "http://repo.maven.apache.org/maven2" } 
} 

dependencies { 
    testCompile group: 'junit', name: 'junit', version:'3.8.1' 
    compile 'org.xerial:sqlite-jdbc:3.7.2' 
} 


jar { 
    manifest.attributes("Main-Class": "Main") 
} 

/* Overwriting distribution tasks: */ 
task distZip(type:Zip, overwrite:true) { 
    archiveName = "$project.name-$version" + '.zip' 
    from "target/libs" 
} 

task distTar(type:Tar, overwrite:true) { 
    archiveName = "$project.name-$version" + '.tar' 
    from "target/libs" 
} 

它抛出一个异常Java源代码:通过该项目的分布jar文件的类路径中添加sqlite的

try { 
    Class.forName("org.sqlite.JDBC"); 

    this.connection = DriverManager.getConnection(databaseName); 
} catch (Exception e) { 
    e.printStackTrace(); 
} 
+0

源代码? build.gradle文件内容? – fge

+0

当使用'gradle run'执行应用程序时,应用程序插件将自动使'compile'(和'runtime')依赖项可用。您应该能够通过使用'--info'日志级别执行Gradle来验证这一点。 –

回答

2

我已经修复了这个问题通过修改我的jar部分:

task copyDependenciesToTarget(type: Copy) { 
    println 'Copying dependencies to target...' 

    configurations.compile.collect().each { compileDependency -> 
     copy { 
      with from (compileDependency.getPath()) { 
       include '*' 
      } 
      into 'target/libs/libs' 
     } 
    } 
} 

build.dependsOn(copyDependenciesToTarget) 


jar { 
    manifest.attributes(
      "Main-Class": "Main", 
      "Class-Path": configurations.compile.collect { 'libs/' + it.getName()}.join(' ') 
    ) 
} 

现在gradle下载依赖关系并将它们复制到libs/目录。