10

メインメソッドを介してJavaクラスを実行するだけで現在機能するgradleビルドスクリプトがあります。私が知りたいのは、どうすれば同じクラスで静的メソッドを呼び出すことができるかということですが、メイン メソッドを経由する必要はありません。現在の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

私の質問は、どうすればメイン メソッドをスキップし、メソッド「anotherMethod」を gradle スクリプトから直接呼び出すことができるかということです。出力は次のようになります。

In anotherMethod
arg1 arg2

ありがとう

4

4 に答える 4

3

jar またはクラスをクラスパスに追加する必要があります。クラスを含むjarファイルの例を次に示します。ファイル build.gradle 内に依存関係を追加します。私のjarファイルはlib、パスがlib/MQMonitor.jar.

import mypackage.MyClass
buildscript {
   repositories {
      flatDir name: 'localRepository', dirs: 'lib'
   }
    dependencies {
        classpath name: 'MQMonitor'
    }
}

task myTaskCallJava << {
   MyClass.foo()
}
于 2016-08-12T11:29:10.457 に答える
-1

静的メソッドを実行する場合は、クラスを 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')
    }
}
于 2013-12-27T19:51:25.780 に答える