有 Java 编程相关的问题?

你可以在下面搜索框中键入要查询的问题!

如何从Gradle调用静态Java方法

我有一个gradle构建脚本,目前只需通过主方法执行Java类即可。我想知道的是,我如何在同一个类中调用静态方法,而不必经过main方法。当前的gradle代码如下:

import org.apache.tools.ant.taskdefs.condition.Os
apply plugin: 'java'

defaultTasks 'runSimple'

project.ext.set("artifactId", "test-java")

File rootDir = project.getProjectDir()
File targetDir = file("${rootDir}/target")
FileCollection javaClasspath = files("${targetDir}/tools.jar")

task(runSimple, dependsOn: 'classes', type: JavaExec) {
    main = 'com.test.model.JavaTest'
    classpath = javaClasspath
    args 'arg1'
    args 'arg2'
}

我的Java类如下:

package com.test.model;

public class JavaTest {

    public static void main(String[] args) throws Exception {
        System.out.println("In main");
        anotherMethod(args[0], args[1]);
    }

    public static void anotherMethod(String arg1, String arg2) {
        System.out.println("In anotherMethod");
        System.out.println(arg1 + " " + arg2);
    }
}

这给了我输出:

:compileJava UP-TO-DATE
:processResources UP-TO-DATE
:classes UP-TO-DATE
:runSimple
In main
In anotherMethod
arg1 arg2

BUILD SUCCESSFUL

Total time: 2.344 secs

我的问题是,如何跳过main方法,直接从gradle脚本中调用方法“anotherMethod”?然后,输出将是:

In anotherMethod
arg1 arg2

谢谢


共 (2) 个答案

  1. # 1 楼答案

    必须将jar或类添加到类路径中。下面是一个包含该类的jar文件的示例。 在文件构建内部。gradle添加依赖项。 我的jar文件在lib文件夹中,路径是lib/MQMonitor.jar

    import mypackage.MyClass
    buildscript {
       repositories {
          flatDir name: 'localRepository', dirs: 'lib'
       }
        dependencies {
            classpath name: 'MQMonitor'
        }
    }
    
    task myTaskCallJava << {
       MyClass.foo()
    }
    
  2. # 2 楼答案

    如果要执行静态方法,需要将该类添加到Gradle构建脚本的类路径中

    要将代码添加到构建脚本类路径(如果代码位于存储库中),请执行以下操作:

    buildscript {
        repositories {
            maven { url "${yourRepositoryURL}" }
        }
        dependencies {
            classpath 'com.yourgroup:yourpackagename:version'
        }
    }
    

    如果代码是在本地生成的(我没有测试这个),那么将代码添加到构建脚本类路径:

    buildscript {
        dependencies {
            classpath files("path/to/where/the/class/files/are")
        }
    }
    

    然后,您应该能够像调用其他方法一样调用该方法:

    task runSimple(dependsOn: 'classes') {
        doFirst() {
            com.test.model.JavaTest.anotherMethod('arg1', 'arg2')
        }
    }