簡體   English   中英

Java Sqlite Gradle

[英]Java Sqlite Gradle

我非常喜歡gradle和java ..

我有一個使用sqlite的項目,它通過intellij想法運行良好,但我不能從終端運行它,它拋出一個異常:

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這是解決方案,但如何在不指定classpath的情況下運行項目的.jar文件? 我的意思是可以自動gradle生成清單(因為它成功從maven org.xerial存儲庫中檢索sqlite-jdbc)並將有效的類路徑放在那里? 我想從終端成功運行它。

UPD:我不能僅通過gradle run命令從終端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源代碼:

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

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

我通過修改我的jar部分,在項目的分發jar文件的類路徑中添加sqlite來解決這個問題:

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/目錄。

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM