Gradle之恋(12)——实战依赖与构件

楔子

把项目需要的类库(jar包等artifact)加入到项目的classPath中的过程叫依赖,把项目编译、打包供其他项目依赖的过程叫构件(artifact)。结合前面的文章,来做实战。
Gradle

创建项目

首先建立如下目录
目录
test-artifact用于构建artifact,test-dependency用于依赖artifact。
然后分别建立Gradle项目

cd test-artifact/ && gradle init -x wrapper --type java-library && cd ../
cd test-dependency/ && gradle init -x wrapper --type java-application && cd ../

结构如下
项目目录
实例源码存放于github

构件实战

编辑test-artifact/src/main/java/Library.java

public class Library {
public String sayHello() {
return "hello,gradle!";
}
}

编辑test-artifact/build.gradle

apply plugin: 'java'
apply plugin: 'maven'

group='com.zqf'
version='1.0.0'

repositories {
//依赖maven远程仓库
maven { url "http://nexus.zhaiqianfeng.com:8081/nexus/content/groups/public" }
}

dependencies {
testCompile 'junit:junit:4.12'
}

task sourcesJar(type: Jar, dependsOn: classes) {
classifier = 'sources'
from sourceSets.main.allSource
}

artifacts {
archives sourcesJar
}

//发布构件
uploadArchives{
repositories{
mavenDeployer{
//发布到maven本地文件
repository(url:"file://localhost/tmp/maven-rpo/")

//发布到maven远程仓库
repository(url: "http://nexus.zhaiqianfeng.com:8081/nexus/content/repositories/thirdparty/") {
authentication(userName: "admin", password: "admin123")
}
}

//发布到ivy本地文件
ivy{
url "/tmp/ivy-rpo/"
}

//发布到maven本地仓库
mavenLocal()

//更多的仓库.....
}
}

任务sourcesJar和artifacts是为了把源码也发布到仓库,便于调试等;mavenDeployer需要使用maven插件。
上例中向nexus的thirdparty上传artifact,需要把thirdparty设置为“Allow Redeploy”,否则你第一次上传可以成功,再次上传就会报告400异常。
nexus设置

执行命令”gradle uploadArchives”或”gradle uA”即可上传到配置中的各仓库。

依赖实战

编辑test-dependency/src/main/java/App.java

public class App {
public static void main(String[] args) {
Library library=new Library();
System.out.println(library.sayHello());
}
}

编辑test-dependency/build.gradle

apply plugin: 'application'

repositories {
//依赖maven远程仓库
maven { url "http://nexus.zhaiqianfeng.com:8081/nexus/content/groups/public" }

//依赖maven本地文件
maven {url "file://localhost/tmp/maven-rpo/"}

//依赖ivy本地文件
ivy{
url "/tmp/ivy-rpo/"
}

//依赖maven本地仓库
mavenLocal()
}

dependencies {
compile 'com.zqf:test-artifact:1.0.0'
testCompile 'junit:junit:4.12'
}

mainClassName = 'App'

执行”gradle -q run”即可打印”hello,gradle!”

可执行jar

如果需要把test-dependency打包成可执行的jar,因为有外部依赖,所以不仅需要manifest,还需要把依赖一起打包,因此编辑test-dependency/build.gradle,添加

jar {
//把依赖的包打包进可执行jar
from { configurations.compile.collect { it.isDirectory() ? it : zipTree(it) }}

//添加manifest
manifest {
attributes 'Main-Class':'App'
}
}

打包并执行

gradle -q jar && java -jar build/libs/test-dependency.jar

翟前锋 wechat
欢迎订阅我的微信公众号:zhaiqianfeng!