newKP——Gradle(二)
2017-01-10 本文已影响0人
Aouchinx
1.Gradle添加仓库
仓库是一种存放依赖的容器,每一个项目都具备一个或多个仓库。
Gradle支持 *Ivy仓库/Maven仓库/Flat directory仓库 *
我们主要是用Maven仓库,添加maven仓库的方法:
repositories {
maven {
url "http://central.maven.org/maven2/"
}
}
在加入Maven仓库时,Gradle提供了三种别名供我们使用,它们分别是:
- mavenCentral()别名,表示依赖是从Central Maven 2 仓库中获取的。
- jcenter()别名,表示依赖是从Bintary’s JCenter Maven 仓库中获取的。
- mavenLocal()别名,表示依赖是从本地的Maven仓库中获取的。
由于maven中央仓库服务器在国外,下载速度很慢,推荐两个国内的镜像,二选一:
repositories {
maven {
url "http://maven.aliyun.com/nexus/content/groups/public/" /*阿里云镜像*/
url "http://maven.oschina.net/content/groups/public/" /*开源中国镜像*/
}
}
2.Gradle依赖管理
依赖分类
在Gradle中,依赖是按照指定名称进行分类的,这些分类被称为配置项,我们可以使用配置项声明项目的外部依赖。
Java插件指定了若干依赖配置项,其描述如下:
compile -该配置内容包含的依赖在 编译项目源码时是必须的。
runtime -该配置内容包含的依赖在 运行时是必须的。
testCompile -该配置内容包含的依赖在 编译项目的测试代码时是必须的。
testRuntime -该配置内容包含的依赖在 运行测试代码时是必须的。
archives -该配置内容包含项目生成的文件(如Jar文件)。
default -该配置内容包含的依赖在 运行时是必须的。
声明依赖
需要为依赖指明 分组:名称:版本 。两种写法:
dependencies {
compile group: 'log4j', name: 'log4j', version: '1.2.17'
}
dependencies {
compile 'log4j:log4j:1.2.17'
}
在项目中使用依赖的Logger库:
import org.apache.log4j.Logger;
public class HelloWorld {
private static final Logger LOGGER = Logger.getLogger(HelloWorld.class);
public static void main(String[] args) {
System.out.println("Hello World!");
LOGGER.info("This is log info!");
}
}
这里为了测试运行,需要在src/main/resources目录添加log4j.properties配置文件:
log4j.appender.Stdout=org.apache.log4j.ConsoleAppender
log4j.appender.Stdout.layout=org.apache.log4j.PatternLayout
log4j.appender.Stdout.layout.conversionPattern=%-5p - %-26.26c{1} - %m\n
log4j.rootLogger=DEBUG,Stdout
将项目打包jar并运行:
$ java -jar FirstApplication-1.0-SNAPSHOT.jar
'Exception in thread "main" java.lang.NoClassDefFoundError: org/apache/log4j/Logger
at ouxch.exmaple.HelloWorld.<clinit>(HelloWorld.java:11)
Caused by: java.lang.ClassNotFoundException: org.apache.log4j.Logger
at java.net.URLClassLoader.findClass(URLClassLoader.java:381)
at java.lang.ClassLoader.loadClass(ClassLoader.java:424)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:331)
at java.lang.ClassLoader.loadClass(ClassLoader.java:357)
... 1 more
抛出异常的原因是,当我们运行程序时,Log4j的依赖在classpath中没有找到。
解决这个问题最简单的方式是创建一个所谓的“胖”Jar文件,即把所有程序运行所需的依赖都打包到Jar文件中去。
修改gradle构建脚本:
jar {
from {
configurations.compile.collect {
it.isDirectory() ? it : zipTree(it)
}
}
manifest {
attributes 'Main-Class': 'ouxch.exmaple.HelloWorld'
}
}
重新编译打包运行:
$ java -jar FirstApplication-1.0-SNAPSHOT.jar
Hello World!
INFO - HelloWorld - This is log info!