美文网首页
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