美文网首页
newKP——Gradle(二)

newKP——Gradle(二)

作者: Aouchinx | 来源:发表于2017-01-10 15:54 被阅读0次

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!

相关文章

网友评论

      本文标题:newKP——Gradle(二)

      本文链接:https://www.haomeiwen.com/subject/loekbttx.html