簡體   English   中英

你如何構建一個包含外部.jar依賴項的.jar?

[英]How do you build a .jar that contains external .jar dependencies?

我正在使用Microsoft JDBC Driver 4.1連接到SQL Server。 在Eclipse中,我將.jar文件添加到項目的類路徑中(C:\\ Program Files \\ Microsoft JDBC Driver 4.1 for SQL Server \\ sqljdbc_4.1 \\ enu \\ sqljdbc41.jar)。

我已經將這個.jar添加到了我的項目中名為lib的文件夾中,並嘗試將此.jar作為我的.jar的一部分添加:

repositories {
    mavenCentral()
  }

dependencies {
    compile files('lib/sqljdbc41.jar')
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

但是,sqljdbc41.jar不包含在我的.jar中。 我錯過了什么嗎?

您必須創建(應用程序)分發以將庫和應用程序jar打包到一個文件夾中: http//gradle.org/docs/current/userguide/application_plugin.html

或者,您可以使用像https://github.com/johnrengelman/shadow這樣的插件來創建一個獨立的uberjar。

謝謝chromanoid。 我能夠通過兩種方式解決問題。 首先,我將sqljdbc41.jar放在項目中名為lib的新文件夾中。 解決方案1是創建應用程序分發:

apply plugin:'application'
apply plugin: 'java'

mainClassName = "main.java.application.Main"

repositories {
    mavenCentral()
  }

dependencies {
    runtime files('lib/sqljdbc41.jar')
    testCompile group: 'junit', name: 'junit', version: '4.+'

}

然后,您可以使用distZip任務創建分發。 解決方案2是創造一個胖罐。

apply plugin: 'java'

repositories {
    mavenCentral()
 }

configurations {
    provided
    compile.extendsFrom provided
}

dependencies {
    runtime files('lib/sqljdbc41.jar')
    testCompile group: 'junit', name: 'junit', version: '4.+'

}

jar {
    dependsOn configurations.runtime
    from {
        (configurations.runtime - configurations.provided).collect {
            it.isDirectory() ? it : zipTree(it)
        }
    } {
        exclude "META-INF/*.SF"
        exclude "META-INF/*.DSA"
        exclude "META-INF/*.RSA"
    }
}

並使用構建任務。

暫無
暫無

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

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