java - Groovy 脚本运行 java 主类

标签 java ant groovy gradle

我有以下主类代码,我尝试使用 gradle 运行它。我在下面附上了 java 和 gradle 脚本的示例主类。

public class Hello {
   public static void main(String[] args) throws IOException {

      System.out.println("This is file system watch service"); 
      Path dir = Paths.get("c:\\sid\\");
      WatchService service = FileSystems.getDefault().newWatchService();
      WatchKey key = dir.register(service, ENTRY_CREATE);

      System.out.println("Watching directory: "+dir.toString());
      //file creation logic
      while(true) {
         for (WatchEvent<?> event: key.pollEvents()) {
            WatchEvent.Kind<?> kind = event.kind();
            if (kind == OVERFLOW) {
               continue;
            }

            WatchEvent<Path> ev = (WatchEvent<Path>)event;
            Path filename = ev.context();
         }
      }
   }
}

我的gradle脚本如下

apply plugin: 'java'
task hello1 << {
   def process = ['java', '-cp', 'sourceSets.main.runtimeClasspath',  'com.test.gradle.Hello'].execute()
   process.in.close()
   process.out.close()
   process.err.close()
}

task hello << {
   ant.java(classpath:'sourceSets.main.runtimeClasspath', classname:'com.test.gradle.Hello', fork:'true')
   ant.echo('Done')
}

当我从命令提示符调用 gradle hello1 时,它说构建成功,但似乎我的主程序从未被执行。为了查看主程序的执行情况,我使用 PrintWriter 添加了示例 sysout 和文件创建逻辑。 我也尝试过使用 ant 和 gradle hello 这也不起作用。

现在,当我使用如下所示的 gradle 任务时,从之前的版本中删除了 fork true

task hello << {
    ant.java(classpath:'sourceSets.main.runtimeClasspath.asPath', classname:'com.test.gradle.Hello.class')
    ant.echo('Done')

}

it is generating below exception

[ant:java] Could not find com.test.gradle.Hello.class. Make sure you have it in
your classpath
        at org.apache.tools.ant.taskdefs.ExecuteJava.execute(ExecuteJava.java:13
8)
        at org.apache.tools.ant.taskdefs.Java.run(Java.java:771)
        at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:221)
        at org.apache.tools.ant.taskdefs.Java.executeJava(Java.java:135)
        at org.apache.tools.ant.taskdefs.Java.execute(Java.java:108)
        at org.apache.tools.ant.UnknownElement.execute(UnknownElement.java:292)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.apache.tools.ant.dispatch.DispatchUtils.execute(DispatchUtils.jav
a:106)
        at groovy.util.AntBuilder.performTask(AntBuilder.java:319)
        at groovy.util.AntBuilder.nodeCompleted(AntBuilder.java:264)
        at org.gradle.api.internal.project.ant.BasicAntBuilder.nodeCompleted(Bas
icAntBuilder.java:72)
        at groovy.util.BuilderSupport.doInvokeMethod(BuilderSupport.java:147)
        at groovy.util.AntBuilder.doInvokeMethod(AntBuilder.java:203)
        at org.gradle.api.internal.project.ant.BasicAntBuilder.doInvokeMethod(Ba
sicAntBuilder.java:87)
        at groovy.util.BuilderSupport.invokeMethod(BuilderSupport.java:64)
        at org.codehaus.groovy.runtime.callsite.PogoMetaClassSite.call(PogoMetaC
lassSite.java:45)
        at org.codehaus.groovy.runtime.callsite.CallSiteArray.defaultCall(CallSi
teArray.java:45)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCa
llSite.java:108)
        at org.codehaus.groovy.runtime.callsite.AbstractCallSite.call(AbstractCa
llSite.java:116)
        at build_1dcr9mg141bsc4tjjgplovccq0$_run_closure2.doCall(C:\Users\sumit\
workspace1\gradleTest\build.gradle:13)
        at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
        at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.
java:57)
        at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAcces
sorImpl.java:43)
        at java.lang.reflect.Method.invoke(Method.java:601)
        at org.codehaus.groovy.reflection.CachedMethod.invoke(CachedMethod.java:
90)

最佳答案

试试这个

javaexec {
    main = 'com.pack.YourClass'
    classpath(sourceSets.src.output.classesDir, sourceSets.src.compileClasspath)
    args(arg1, arg2)
}

关于java - Groovy 脚本运行 java 主类,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/26088130/

相关文章:

java - 在 Java 中用字节数组替换 BufferedInputStream

Java 泛型可变参数方法参数

ant - 如何在 Intellij Idea 上打开 Ant 项目(Nutch Source)?

postgresql - 我在 cmd : 中运行命令 ant CreateDb 时收到以下错误消息

java - SwingBuilder : scrollPane

debugging - Netbeans 6.7是否无法在Grails应用程序中调试Groovy闭包?

java代码格式

java - 消息转换器在 Spring 中不工作

java - Gradle项目是否可以重建其依赖项,跟踪其源更改等?

java - 浏览器或面板 java 或 groovy 中的 SSH 终端