java - Gradle 未编译 lib 文件夹中的依赖项 jar

标签 java eclipse gradle jar build.gradle

我现在是 gradle 和学习的新手。我正在尝试使用 gradle 构建一个可运行的 jar(我构建的 jar 应该从命令提示符运行)。我刚刚开始使用一个带有依赖项的简单 HelloWorld 项目,并尝试使用 gradle 构建它。我没有使用maven。所以我将依赖项 jar 添加到项目文件夹内的 lib 文件夹中。以下是详细信息。

Gradle 版本:3.1 Eclipse 版本:Neon

HelloWorld.java

package com.padhu.test;
import org.joda.time.LocalTime;

public class HelloWorld {

    public static void main(String[] args) {
        // TODO Auto-generated method stub

        LocalTime currentTime = new LocalTime();
        System.out.println("The current local time is: " + currentTime);

        System.out.println("Hello World");

    }

}

项目结构:

project_structure

build_path_snap

build_path_details

build.gradle 文件:

apply plugin: 'java'
apply plugin: 'application'
mainClassName = 'com.padhu.test.HelloWorld'

repositories {

   flatDir {
      dirs 'lib'
   }
}

dependencies {


    compile files(fileTree(dir: 'lib', includes: ['*.jar']))

    }

jar {
  manifest {
    attributes(

      'Main-Class': 'com.padhu.test.HelloWorld'
    )
  }
}

我可以在 cmd 中成功执行 gradle build 并且正在生成 jar 文件。但在 jar 文件中,我只能看到 HelloWorld 文件夹结构,但看不到依赖文件。因此,我无法从命令提示符运行 jar,因为我收到 NoClassDefFoundError: org/joda/time/LocalTime..

我尝试通过搜索和阅读博客来自行解决问题..但我无法成功运行该 jar。

请帮助我。

最佳答案

看来,您误解了 application 插件的行为方式。它不会创建一个所谓的 fat-jar(其中包含所有依赖项),而是创建一个 jar 并能够运行它,将所有依赖项添加到类路径中。

您可以按如下方式运行您的应用程序:

gradle run

或者您可以使用自动应用的发行版插件,并使用脚本创建项目的发行版来启动它,并将所有依赖库放在单独的文件夹中。只需运行它:

gradle distZip

您可以在official user guide中阅读更多相关信息。 .

关于java - Gradle 未编译 lib 文件夹中的依赖项 jar,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/43167179/

相关文章:

android - Gradle 5.x - 将我的库发布到 Maven Local 时出错

java - Gradle获取zip fullpathname以通过ssh上传

Eclipse - eclipse.ini 不工作

c++ - 无法在 Eclipse 中使用 C++ 连接 mySQL 数据库

java - cvHaarDetectObjects() 方法有什么作用?

java - Box2d 主体填充有纹理 Libgdx

java - 处理:当从 Eclipse 设置内部调用时,createShape 返回 null

gradle - 像Javadoc中一样摇晃 “keyword”索引?

java - 如何从日期选择器获取日期到android中的另一个 Activity

java - 多线程写入文本文件