天天看點

Gradle添加依賴及使用注解(添加插件)

一、基于Gradle可以建構很多項目,下面以Kotlin項目為例

package com.reflections

import sun.management.Agent

/**
 * @author:wangdong
 * @description:反射
 */

/**定義一個person類*/
//通過poko注解生成無參構造的方法
//@Noarg
class Person(val name:String,val age: Int)   //預設是沒有無參構造的

class DefaultConstructor()    

fun main(args: Array<String>) {
    //拿到class的2種方式
    //1.
    val clazz = Person::class.java
    //new一個person執行個體
    //2.
    val person = Person("wangdong",23)
    val clazz2 = person.javaClass
    val clazz3 = person::class.java

    val defaultConstructor = DefaultConstructor::class.java.newInstance()
    val person2 = clazz2.newInstance()   //這個在沒有添加@Noarg注解是不行的
}           

二、在運作這個main方法的時候,會報異常

原因是Person類預設情況下是沒有無參構造的

Exception in thread "main" java.lang.InstantiationException: com.reflections.Person
    at java.lang.Class.newInstance(Class.java:427)
    at com.reflections.JavaReflectionsKt.main(JavaReflections.kt:28)
Caused by: java.lang.NoSuchMethodException: com.reflections.Person.<init>()
    at java.lang.Class.getConstructor0(Class.java:3082)
    at java.lang.Class.newInstance(Class.java:412)
    ... 1 more           

三、在Gradle項目中引入插件并定義注解,以kotlin-noarg插件為例

改寫build.gradle檔案

buildscript {
    ext.kotlin_version = '1.2.30'

    repositories {
        mavenCentral()
    }
    dependencies {
        classpath "org.jetbrains.kotlin:kotlin-gradle-plugin:$kotlin_version"
        //1.添加一個無參構造的插件
        classpath "org.jetbrains.kotlin:kotlin-noarg:$kotlin_version"
    }
}

group 'net.kotlinreflects.com'
version '1.0-SNAPSHOT'

apply plugin: 'java'
apply plugin: 'kotlin'
//2.引用無參構造
apply plugin: 'kotlin-noarg'

//3.配置注解,用來給class生成預設無參的方法的
noArg{
//配置類的路徑
    annotations "com.reflections.Noarg"
}
sourceCompatibility = 1.8

repositories {
    mavenCentral()
}

dependencies {
    compile "org.jetbrains.kotlin:kotlin-stdlib-jdk8:$kotlin_version"
    testCompile group: 'junit', name: 'junit', version: '4.12'
}

compileKotlin {
    kotlinOptions.jvmTarget = "1.8"
}
compileTestKotlin {
    kotlinOptions.jvmTarget = "1.8"
}           

四、根據build.gradle類中的路徑,寫一個注解類

package com.reflections

/**
 * @author:wangdong
 * @description:配置一個注解
 */

annotation class Noarg           

五、使用注解

将第一步中的注解開啟

@Noarg
class Person(val name:String,val age: Int)   //預設是沒有無參構造的           

六、運作main方法

好了,就不會報錯了,就完成了