2014-03-13 51 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/目錄。