在 Gradle 脚本中处理Manifest: ClassPath

运行Java程序时,为了告诉系统到哪里去找外部的库文件,必须以Class-Path的形式把库的路径传递给jvm。基本的方式就是在Manifest文件中指定Class-Path,在Gradle 中,可以使用如下代码:

   1: jar {
   2:     manifest {
   3:         attributes 'Main-Clas': 'your.Class'
   4:         attributes 'Class-Path': 'ext.libA.jar ext.libB.jar'
   5:     }
   6: }

问题是,如果你的项目有20个jar需要导入,难道也一个个输入吗(真正的程序员拒绝打字到手软……)?如果变更了怎么办?

Well,在这里我不打算深究Gradle的DSL,也不指望用很标准的Gradle风格来搞定一切,但既然Gradle的配置文件本质上是Groovy,那么我的确知道在groovy中可以这样做……假设你所有的jar都放在lib文件夹里。那么在build.gradle文件的开头定义 libPath = ‘lib’,然后,将前面第4行代码改为:

   1: attributes 'Class-Path': new File(libPath).list().findAll {
   2:     it.endsWith('.jar') }.collect { "$libPath/$it" }.join(' ')

这就是动态语言的表现力!!!