gradle可执行jar无法包含本地jar依赖项

问题描述 投票:0回答:1

(对不起,英语不好。)

我必须连接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')
}

cmd

{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 connection = DriverManager.getConnection(
                        jdbc:oracle:thin:@{address}:{port}:{sid},
                        {username},
                        {password}
                );

文件树

- {root directory}
  - lib
    - ojdbc6.jar
  - src
    - main
      - java
        - App.java
        - WaitingDatabase.java
  - build.gradle
java oracle gradle jar executable-jar
1个回答
0
投票

您所做的是正确的:

compile files('lib/ojdbc6.jar')

删除它,然后尝试这个:

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

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

© www.soinside.com 2019 - 2024. All rights reserved.