Java Sqlite Gradle

2024-05-12

我对 gradle 和 java 还很陌生..

我有一个使用 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

正如我在这里看到的,想法指定了类路径,这是解决方案,但是如何在不指定类路径的情况下运行项目的 .jar 文件?我的意思是可以gradle自动生成清单(因为它从 maven 检索 sqlite-jdbcorg.xerial存储库成功)并将有效的类路径放在那里? 我想从终端成功运行它。

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源代码:

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

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

我通过修改我的项目的分发 jar 文件的类路径中添加 sqlite 解决了这个问题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/目录。

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

Java Sqlite Gradle 的相关文章

随机推荐

  • Term::ReadLine - 我需要点击向上箭头两次才能检索历史记录

    我正在使用 Term ReadLine 并遇到一个奇怪的问题 我需要点击向上箭头两次才能从 addhistory 中检索项目 这是我正在使用的脚本 use Term ReadLine my term Term ReadLine gt new
  • RxJS - 我需要取消订阅吗

    如果我有这样的事情 class MyComponent constructor this interval Observbale interval 1000 const c new MyComponent const subscriptio
  • 无法将大小为 1665179 的数组重塑为形状 (512,512,3,3)

    该脚本用于进行检测 权重文件是 yolov4 coco 预训练模型 可以在这里找到 https drive google com file d 1cewMfusmPjYWbrnuJRuKhPMwRe b9PaT view https dri
  • UIButton 上的圆形渐变边框

    您好 我一直在尝试在我的应用程序中实现一个 UIButton 它具有圆角和渐变边框 我使用以下代码在按钮上创建渐变边框 let gradient CAGradientLayer gradient frame CGRect origin CG
  • Android如何让进度条(圆形)在按下按钮时覆盖全屏?

    我尝试在单击提交按钮时显示进度栏 数据加载完成后它将隐藏 但是 进度条没有覆盖全屏 相反 它被按钮覆盖 请参考截图 应该更容易理解我的意思 我想要实现的是屏幕截图的底部部分 Main4Activity java public class M
  • 获取jdbc中表依赖顺序

    我在 MySQL 数据库中有一组表 A B C D 依赖关系如下 B gt C gt A 和 D gt A 也就是说 A 有一个 PrimaryKey C 有一个外键指向 A 的主键 B 有一个外键指向 C 的主键 类似地 D 有一个外键指
  • 如何更改 Amazon Redshift 中的默认时区?

    默认情况下将时间戳列设置为 SYSDATE 将其存储为UTC 是否可以更改时区 以便 SYSDATE 将日期和时间存储到不同的时区 到目前为止 我已经检查了SET http docs aws amazon com redshift late
  • 机架超时:关闭信息/活动日志记录

    随着机架超时 https github com heroku rack timeoutgem 安装后如何才能仅显示 ERROR 相关日志 例如 我想避免在我的日志中出现以下内容 source rack timeout id 8a11a8ac
  • WinError6 句柄无效 Python 3+ 多处理

    我正在运行一个 Python 3 7 Flask 应用程序 它使用flask socketio设置一个socketio用于浏览器客户端的服务器 另一个连接到单独远程的Python进程socketio服务器和交换消息 以及另一个从 PIR 传
  • JSF:不同验证器标签的不同验证消息?

    在我的 JSF Primefaces 应用程序中 我正在使用 JSF 验证器标签来验证文本框的输入
  • 在Pytorch中计算欧几里得范数..理解和实现上的麻烦

    我见过另一个 StackOverflow 线程讨论计算欧几里德范数的各种实现 但我很难理解特定实现的原因 如何工作 该代码可以在 MMD 指标的实现中找到 https github com josipd torch two sample b
  • ViewPager 开关 FragmentPagerAdapter

    我有一个ViewPager这是由一个FragmentPagerAdapter 我想将第一个适配器更换为另外两个 问题是之前加载的所有页面 同时具有第一个适配器 仍然是旧的页面 我查看了源代码FragmentPagerAdapter并猜测问题
  • Linux 上的 Python 3.6 tkinter 窗口图标错误

    我正在从 Python GUI 编程手册 学习 Python GUI 某项任务要求我通过将以下代码添加到我的配方中来更改窗口图标 Change the main windows icon win iconbitmap r C Python3
  • 将 Spring MVC 中的默认/全局日期格式设置为 ISO 8601

    我有一个简单的 Spring 控制器 RequestMapping value method RequestMethod GET public void search MyDTO dto And MyDTO public class MyD
  • 未找到行魔术函数“%%time”

    运行这个Python脚本 time train data dt fread input prediction train csv to pandas 提供的输出返回此错误 UsageError Line magic function tim
  • 如何覆盖运行时创建的 wpf 控件中的应用程序样式

    我试图在运行时创建一个 WPF 控件 但我不知道如何让它忽略来自 App xml 资源的样式 我尝试将样式设置为 null 并将 OverridesDefaultStyle 设置为 true 但没有成功 应用程序设置将前景设置为白色 我似乎
  • Azure 媒体服务仅限音频

    我们已开始使用 Azure 媒体服务 AMS 来编码 加密和托管我们的视频 MP4 效果良好 然而 除了视频之外 我们还有 MP3 音频文件 由于我们已经在使用 AMS 因此将它们放在这里也是有意义的 但我们遇到了问题 当我们尝试从门户进行
  • 如何在SQLite中的两个表之间复制数据?

    我有两个具有不同列的表 如下所示 table1 id title name number address table2 id phone name address 如何将数据 名称 地址 从表 1 复制到表 2 我的问题有两种情况 第一 t
  • 如何使用 Passport-saml 向 TestShib IdP 提供 SP 元数据?

    我有一个node js脚本 使用护照 saml https www npmjs com package passport saml 模拟 SP 我的目标是将其连接到此TestShib IdP https idp testshib org i
  • Java Sqlite Gradle

    我对 gradle 和 java 还很陌生 我有一个使用 sqlite 的项目 它通过 intellij idea 运行良好 但我无法从终端运行它 它会抛出异常 java lang ClassNotFoundException org sq