在 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(' ')

这就是动态语言的表现力

PS 1: 从今天开始只用Gradle写api了,可执行的程序直接用griffon来写,所以不再有这个Class-Path的问题了。(嗯,Griffon是用Gradle来折腾的)

PS 2: CodeSnipper支持的语言太少了,没有groovy(所以也没有Grails和Griffon)、没有Python(从前天晚上等到今天早上才等来Python 3.2的发布,好辛苦)、没有Scala也没有Go,是不是我学的太小众?另外,在我的Live Writer上,如果在CodeSnipper中只打一个TAB,鼠标指针那个抖啊,抖得我害怕了。

PS 3: 新界面的Writer好蠢,发布按钮居然要点开菜单才能看到?

你可能感兴趣的:(Java,&,Groovy)