Gradle设置 Java项目classpath

35 篇文章 0 订阅

We’re building something great. Come help us. Join the Team!


I need to run a main method on a java class from my build.gradle file. But how do avoid to specify the whole classpath manually like I am doing below:

task(runSimple, dependsOn: 'classes', type: JavaExec) {
 main = 'com.MyMain'
 classpath=sourceSets.main.runtimeClasspath
 classpath+=sourceSets.test.runtimeClasspath
 classpath+=sourceSets.main.resources
 classpath+=configurations.compile.dependencies // all dependencies for this project - is empty :-(
}

The above does not work because the classpath does not contain the projects dependencies. Is there a way to specify that the classpath should be the one used when building this project which also contains all necessary dependencies?

If I add the following to my build.gradle file:

configurations.compile.dependencies.each { println it }

nothing is printed even though running this from commandline:

gradle dependencies

prints a dozen for the compile configuation.

  • created
    Nov '12
  • last reply
    Jun '13
  • 4
    replies
  • 6.8k
    views
  • 4
    users
  • 5
    links

Haven't tested this so a bit of freestyling here, but looking at the JavaExec API doc at:

206http://gradle.org/docs/current/dsl/org.gradle.api.tasks.JavaExec.html#org.gradle.api.tasks.JavaExec:classpath206

we can see that the type for the 'classpath' property is FileCollection6. The DSL guide further tells us that the Project.configurations property is of type ConfigurationContainer3 and that expressions like:

configurations.compile

return values of type Configuration7. Reading the docs on this last link we can see that, quote:

Configuration is an instance of a FileCollection that contains all dependencies...

Ok, so what we need for the JavaExec.classpath is something of type FileCollection and that is exactly what the "configurations.compile" expression returns.

So to sum this up, I think the following should work for you:

task runSimple(type: JavaExec, dependsOn: 'classes') {
    main = 'com.MyMain'
    classpath = configurations.runtime
}

replacing the 'runtime' part with 'compile' or whichever classpath you might need in your case,

@u1234: does Matias' response answer your question?

Not really. I can only make it work if I do it in the afterEvaluate scope and on the main sourceSet:

afterEvaluate{
  main = 'com.MyMain'
  classpath=sourceSets.main.runtimeClasspath
//
classpath=configurations.runtime , does not work
  println "the classpath: "
  classpath.each { println it }
 }

With the above it finds the class but I get another error that a .properties file cannot be found which is located the test resources (I know that this should only be used when running tests):

test {
  java {
   srcDir 'test'
  }
  resources {
   srcDir 'testResources'
  }
 }

Therefore I have added the test resources like this:

afterEvaluate{
  main = 'com.MyMain'
  classpath=sourceSets.main.runtimeClasspath
  classpath=+sourceSets.test.resources
//
classpath=configurations.runtime , does not work
  println "the classpath: "
  classpath.each { println it }
 }

but it gives an error:

groovy.lang.MissingMethodException: No signature of method: org.gradle.api.internal.file.DefaultSourceDirectorySet.positive() is applicable for argument types: ()

Any suggestions on how to include resources from the test sourceSet when running the above class?

6 months later

--create a new configuration "myMain"

-- to pickup the main classpath and the test classpath mymain.extendsFrom(test,main)

-- then classpath

classpath=configurations.myMain

Hey there! heart_eyes Looks like you're enjoying the discussion, but you're not signed up for an account.

When you create an account, we remember exactly what you've read, so you always come right back where you left off. You also get notifications, here and via email, whenever new posts are made. And you can like posts to share the love. heartbeat

来自:https://discuss.gradle.org/t/running-java-class-from-gradle-build-script/6065

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 打赏
    打赏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

VCHH

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值