9 gradle 之java插件的使用

来源:互联网 发布:客餐厅装饰画淘宝网 编辑:程序博客网 时间:2024/06/07 01:10

为什么要有插件?

大部分Java项目都十分相似:你需要编译你的Java源码文件,运行一些单元测试并且创建一个JAR文件来包含你的class文件。如果你不需要为每一个项目做这些事情,那将是一件美妙的事情。幸运的是,你真的不需要。Groovy通过使用插件来解决这个问题。插件是Gradle的扩展,它以某种方式配置你的项目,典型的做法是添加一些预先配置好用于做某些有用事情的task。Gradle和许多插件运行在一起,并且你可以很简单地编写你自己的插件并分享给别人。其中一种插件就是Java插件。这个插件添加了许多task到你的项目中,这些task会编译和测试你的Java源码,并且把它打包进JAR文件。

Java插件的注意点:

Java插件是基于约定的。这意味着在项目的许多方面该插件都定了默认值,比如Java源码应该放在哪里。如果你的项目遵守约定,在你的构建脚本中你通常不需要做太多的事情就可以完成一个有用的构建。如果在某些地方你不想或无法遵循这个约定,Gradle允许你定制你的项目。事实上,因为对Java项目的支持是以一个插件的形式来实现的,如果你不想的话,你根本不需要在构建Java项目时使用这个插件。


Gradle会期望在src/main/java目录下找到你的项目源码,在src/test/java目录下找到测试源码。另外,在src/main/resources目录下的任何文件都会被作为资源文件添加到JAR文件里,在src/test/resources目录下的任何文件都会被添加到classpath中用于运行测试。所有的输出文件都被创建在build目录里,其中JAR文件在build/libs目录里。


使用方法:

build.gradle

apply plugin: 'java'


插件可以使用的tasks:

build :当你运行gradle build命令时,Gradle将会编译和测试你的代码,并且创建一个JAR文件来包含你的主要class和资源文件。

clean 删除build目录,移除所有已经构建的文件。

assemble 编译和打包你的代码,但是不会运行单元测试。其他插件添加进来的更多的artifact到这个task里。例如,如果你使用了War插件,这个task也将会为你的项目构建WAR文件。

check 编译和测试你的代码。其他插件会添加更多代码检查到该task中。例如,如果你使用checkstyle插件,那么该task也会对你的代码运行Checkstyle。


插件可以配置的属性:


Java插件添加了许多的属性到你的项目中。通常情况下这些属性的默认值就能够让你的项目构建起来。如果这些属性值不适合你的项目,那么修改它们也是很容易的。来看下我们的例子是如何实现的。在例子中我们会声明Java项目的版本号,以及我们的源码是用哪个版本的Java编写的。我们还添加了一些JAR manifest属性。

sourceCompatibility = 1.5
version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart',
                   'Implementation-Version': version
    }
}


Java plugin添加的task是有规律的task,确切的就如它们好像是在构建文件中声明的一样。这意味着你可以使用任何在之前文章所示的结构来定义这些task。例如,你可以设置task的属性,添加task的行为,修改task的依赖,或者完全替换掉task。在我们的例子中,我们将会配置test task,它是Test的一种,通过这个方式在运行测试的时候添加一个系统属性:

test {
    systemProperties 'property': 'value'
}

通常Jar文件需要发布在某一个地方。想要这么做,你必须告诉Gradle在哪里发布JAR文件。在Gradle里,artifacts(比如JAR文件)被发布到仓库里。在下面的例子中,我们将会发布到一个本地目录。你也可以发布到一个远程地址,或者多个地址。

uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
       }
    }
}

运行gradle uploadArchives命令来发布JAR文件。




完整例子:


build.gradle

apply plugin: 'java'
apply plugin: 'eclipse'

sourceCompatibility = 1.5
version = '1.0'
jar {
    manifest {
        attributes 'Implementation-Title': 'Gradle Quickstart',
                   'Implementation-Version': version
    }
}

repositories {
    mavenCentral()
}

dependencies {
    compile group: 'commons-collections', name: 'commons-collections', version: '3.2'
    testCompile group: 'junit', name: 'junit', version: '4.+'
}

test {
    systemProperties 'property': 'value'
}

uploadArchives {
    repositories {
       flatDir {
           dirs 'repos'
       }
    }
}




0 0
原创粉丝点击