我有一个gradle构建脚本,目前只需通过它的main方法执行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
由于
答案 0 :(得分:2)
您必须将jar或类添加到类路径中。这是一个包含该类的jar文件的示例。
在build.gradle文件中添加依赖项。
我的jar文件位于Signature
文件夹中,路径为lib
。
lib/MQMonitor.jar
答案 1 :(得分:1)
我也一直在研究这个问题。你知道我喜欢eclipse和intellij的功能与使用Junit选项运行,我想用命令行和gradle来做这个。
如果您接受将测试方法放在' test'的目录中gradle目录。我实际上有一个公平的解决方案。
package com.udacity.gradle;
import org.junit.Test;
public class TestClass {
@Test
public void anotherMethod() {
System.out.println("This is it, I want this!!!");
}
@Test
public void notMyWantedMethod1() {
System.out.println("not my wanted");
}
public void notMyWantedMethod2() {
System.out.println("not my wanted");
}
}
我的测试类位于 src / test / java / com / udacity / gradle / TestClass.java
然后下面是 build.gradle
的文件apply plugin: "java"
repositories {
mavenCentral()
}
dependencies {
testCompile group: 'junit', name: 'junit', version: '4.12'
}
test {
testLogging.showStandardStreams = true
filter {
//include specific method in any of the tests
includeTestsMatching "*.TestClass.anotherMethod"
}
}
简单的想法你知道这是一个测试类,所以我使用gradle的测试任务。为了指定使用哪种方法,我添加了一个可以指定方法的Test过滤器。
然后你可以运行
gradle test
然后你可以在控制台中找到你想要的东西。但是,请记得添加
testLogging.showStandardStreams = true
如果你不这样做,gradle会吞下你的控制台输出。但即使你没有添加这条线。您可以在
目录中读取测试日志..... /建造/测试结果/测试/ TEST-com.udacity.gradle.TestClass.xml
其中输出组织良好的测试报告。
<?xml version="1.0" encoding="UTF-8"?>
<testsuite name="com.udacity.gradle.TestClass" tests="1" skipped="0" failures="0" errors="0" timestamp="2018-03-31T19:26:44" hostname="hexin-PC" time="0.022">
<properties/>
<testcase name="anotherMethod" classname="com.udacity.gradle.TestClass" time="0.022"/>
<system-out><![CDATA[This is it, I want this!!!
]]></system-out>
<system-err><![CDATA[]]></system-err>
</testsuite>
答案 2 :(得分:0)
如果要执行静态方法,则需要将该类添加到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')
}
}
答案 3 :(得分:0)
假设类在buildscript类路径上(它应该是,因为你从同一个类调用<section>
<header>
<nav>navigation menu</nav>
<span>logo</span>
</header>
container
</section>
)
main
在Gradle 4.6上测试