gradle 可执行 jar 不能包含本地 jar 依赖项

gradle executable jar can't include local jar dependencies

已解决

WaitingDatabase.connect(WaitingDatabase.java:17)

// added this line
Class.forName("oracle.jdbc.driver.OracleDriver");

connection = DriverManager.getConnection(
        DatabaseProperties.properties.getProperty("waiting_url_oracle"),
        DatabaseProperties.properties.getProperty("waiting_user_oracle"),
        DatabaseProperties.properties.getProperty("waiting_password_oracle")
);

(抱歉英语不好。)

我必须连接我的 oracle 数据库,所以我下载了 oracle jdbc 驱动程序并添加了我的依赖项。 当我在 intellij 运行 时连接良好, 所以我用 gradle.

构建了可执行 jar 文件

但是,它无法连接到我的 oracle 数据库。我认为它是在没有oracle jdbc驱动程序文件的情况下构建的,因为它是一个本地jar文件。

如何使用所有依赖项进行构建?

如果您需要有关我的项目的更多信息来解决此问题,请告诉我。

谢谢 :D


build.gradle

jar {
    manifest {
        attributes 'Main-Class': 'App'
    }
    from {
        configurations.compile.collect {
            it.isDirectory() ? it : zipTree(it)
        }
    }
}

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'

    // https://mvnrepository.com/artifact/mysql/mysql-connector-java
    compile group: 'mysql', name: 'mysql-connector-java', version: '8.0.20'

    // https://mvnrepository.com/artifact/org.mariadb.jdbc/mariadb-java-client
    compile group: 'org.mariadb.jdbc', name: 'mariadb-java-client', version: '2.6.0'

    // https://mvnrepository.com/artifact/com.googlecode.json-simple/json-simple
    compile group: 'com.googlecode.json-simple', name: 'json-simple', version: '1.1.1'

    // oracle 11g jdbc driver
    compile files('lib/ojdbc6.jar')
}

命令

{directory}> java -jar ./{jarFileName}.jar

错误信息

java.sql.SQLException: No suitable driver found for jdbc:oracle:thin:@{address}:{port}:{sid}
        at java.sql.DriverManager.getConnection(Unknown Source)
        at java.sql.DriverManager.getConnection(Unknown Source)
        at WaitingDatabase.connect(WaitingDatabase.java:17)
        at App.connectDatabase(App.java:22)
        at App.main(App.java:5)

WaitingDatabase.connect(WaitingDatabase.java:17)

connection = DriverManager.getConnection(
        DatabaseProperties.properties.getProperty("waiting_url_oracle"),
        DatabaseProperties.properties.getProperty("waiting_user_oracle"),
        DatabaseProperties.properties.getProperty("waiting_password_oracle")
);

文件树

- {root directory}
  - lib
    - ojdbc6.jar
  - src
    - main
      - java
        - App.java
        - WaitingDatabase.java
  - build.gradle

已添加

db.properties

sleep-millisecond=1000

waiting_db=oracle

waiting_url_oracle=jdbc:oracle:thin:@{address}:{port}:{sid}
waiting_user_oracle={username}
waiting_password_oracle={password}

waiting_url_mariadb=jdbc:mariadb://{address}:{port}
waiting_user_mariadb={username}
waiting_password_mariadb={password}

你做的是正确的:

compile files('lib/ojdbc6.jar')

这也有效:

dependencies {
    implementation fileTree(dir: 'lib', include: '*.jar')

这样做的好处是它将包含 lib 目录中的所有 jar,而无需您手动执行。

ojdbc6.jar 用于 JDK 6,如 here 所述。 如果您正在使用 > JDK 6,您可能需要考虑升级您的 ojdbc6.jar 并且最重要的是您可能需要检查 this.

干杯