当前位置: 首页 > 知识库问答 >
问题:

使用 gradle 构建一个非常简单的 java 程序

饶德本
2023-03-14

我是Java和Gradle的新手,有一个非常新的问题。我有以下Java文件:

public class TestMain {
    public static void main(String[] args) {
        System.out.println("Hello.....");
    }
}

我能够使用javac编译上述文件,并使用命令“java TestMain”运行它。

我现在正在尝试使用gradle build框架做同样的事情。我执行了以下步骤:run"gradle init--type java-Library将上述文件复制到src/main/java/

当我跑的时候”。/gradle build”,我得到一个TestMain.class文件,还有一个“building-java-file.jar”(整个grad le目录都在building-java-file目录下)。

$ ls -l build/classes/main/TestMain.class 
-rw-r--r--  1 user1  foo\eng  610 May 22 17:22 build/classes/main/TestMain.class

$ java  build/classes/main/TestMain
Error: Could not find or load main class build.classes.main.TestMain

如何运行TestMain。班另外,gradle创建jar文件building-java-file.jar的原因是什么?

顺便说一句,我的build.gradle文件是空的。

apply plugin: 'java'

repositories {
    jcenter()
}

dependencies {
    // The production code uses the SLF4J logging API at compile time
    compile 'org.slf4j:slf4j-api:1.7.21'

    testCompile 'junit:junit:4.12'
}

谢谢你,艾哈迈德。'

共有3个答案

王弘和
2023-03-14

我认为您正在寻找创建可运行jar的解决方案。以下是解决方案,您可以将其添加到build.gradle中

>

  • 执行gradleinit——类型为java应用程序

    将以下gradle任务添加到build.gradle中

    可运行的胖Jar(将所有依赖库复制到jar)

     task fatJar(type: Jar) {
    
          manifest {
              attributes 'Main-Class': 'com.example.gradle.App'
          }
          from {
              configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }
          } with jar
    
        }
    

    将所有依赖项复制到一个目录中并将类路径添加到清单中的可运行jar

    def dependsDir = "${buildDir}/libs/dependencies/"
    task copyDependencies(type: Copy) {
        from configurations.compile
        into "${dependsDir}"
    }
    task createJar(dependsOn: copyDependencies, type: Jar) {
      
        manifest {
            attributes('Main-Class': 'com.example.gradle.App',
                    'Class-Path': configurations.compile.collect { 'dependencies/' + it.getName() }.join(' ')
            )
        }
        with jar
    }
    

    如何使用?

    将上述任务添加到构建中。gradle
    执行gradle-fatJar//创建fatJar
    Executegragle-createJar //创建已复制依赖项的jar。

    我写的关于这个主题的完整文章可以在这里阅读:一个简单的Java项目与Gradle

  • 颛孙玉石
    2023-03-14

    使用JavaExec。作为一个例子,将以下内容放入build.gradle

    task execute(type:JavaExec) {
       main = mainClass
       classpath = sourceSets.main.runtimeClasspath
    }
    

    要运行gradle-PmainClass=Boo,请执行。你明白了吗

    $ gradle -PmainClass=Boo execute
    :compileJava
    :compileGroovy UP-TO-DATE
    :processResources UP-TO-DATE
    :classes
    :execute
    I am BOOMMMM!
    

    mainClass是在命令行中动态传入的属性。classpath被设置为拾取最新的类。

    如果未传入mainClass属性,则会按预期失败。

    $ gradle execute
    
    FAILURE: Build failed with an exception.
    
    * Where:
    Build file 'xxxx/build.gradle' line: 4
    
    * What went wrong:
    A problem occurred evaluating root project 'Foo'.
    > Could not find property 'mainClass' on task ':execute'.
    
    萧芷阳
    2023-03-14

    我的问题的答案在Gradele留档网站上解释得很清楚。

    基本上,从:gradle init--type java应用程序开始

    友情链接: https://guides.gradle.org/building-java-applications/?_ga=2.79084180.165016772.1527029076-64181247.1527029076

     类似资料:
    • ationConfigEmbeddedWebApplicationContext:上下文初始化过程中遇到异常-取消刷新尝试:org.springframework.beans.factory.unsatisfieddependencyException:创建名为“org.springframework.boot.autocigure.orm.jpa.HibernateJpaAutoConfigur

    • 更多的记忆。而且它还时不时地给出记忆错误。 org.gradle.daemon=true time Eater::App:DexDebug 1M16.46s

    • 本文向大家介绍构建一个简单的CaaS系统,包括了构建一个简单的CaaS系统的使用技巧和注意事项,需要的朋友参考一下 在CaaS系统出现前企业应用架构基本被IaaS/SaaS/PaaS等模式垄断,直到Docker的出现为我们打开了另一个扇大门,废话不说了,我们直奔主题。 我们先了解下一个简单的CaaS系统是如何为用户提供服务的: 企业用户上传它的应用代码或其他代码托管方式,我们生成用户应用的镜像,或

    • 包计算器; 导入静态com.sun.javafx.animation.TickCalculation.sub;导入java.util.扫描仪; 公共类计算器{ }v包装计算器; 导入静态com.sun.javafx.animation.TickCalculation.sub;导入java.util.扫描仪; 公共类计算器{ 包计算器; 导入静态com.sun.javafx.animation.Ti

    • 带渐变后: 30秒/80秒(带清洁) 我对解决方案进行了分析: 结果报告中的主要任务是以下任务:(在没有清洁的构建中) Build.Gradle:

    • - --core(Src/main/Java) --dao(Src/main/Java) --models(Src/main/Java) --main(Src/main/Java) 用main类构建一个jar的最简单方法是什么 对于具有梯度和 是否复制所有类和所有资源?