无法使用gradle在IntelliJ中导入Spring注释@Autowired

时间:2017-11-12 14:22:04

标签: java spring intellij-idea autowired

正如标题所说。我使用的是IntelliJ IDEA 2017.1.4

我的gradle文件如下:

group 'org.ks'
version '1.0-SNAPSHOT'

buildscript {
    repositories {
        maven {
            url "https://plugins.gradle.org/m2/"
        }
    }
    dependencies {
        classpath "org.springframework.boot:spring-boot-gradle-plugin:1.4.7.RELEASE"
    }
}

apply plugin: "org.springframework.boot"

task wrapper(type: Wrapper) {
    gradleVersion = '2.4'
}

apply plugin: 'java'
apply plugin: "io.spring.dependency-management"

sourceCompatibility = 1.8
targetCompatibility = 1.8

但尝试使用@Autowired注释会导致编译错误

package app;

import org.springframework.beans.factory.annotation.Autowired;

public class AutowiredCls {

    @Autowired
    private int app_name;

}

编译器标记导入,@ Autowired为错误(红色下划线)

application.yml:

app.name = autowired_sample

我做错了什么?

3 个答案:

答案 0 :(得分:0)

请添加以下依赖项,有关详细信息,请参阅this

dependencies {
    // tag::jetty[]
    compile("org.springframework.boot:spring-boot-starter-web") {
        exclude module: "spring-boot-starter-tomcat"
    }
}

答案 1 :(得分:0)

看起来你的项目根本没有任何依赖关系。 (我可以看到你的buildscript有依赖关系......但这些不适用于自己的项目源。)

以下是我使用https://start.spring.io生成的项目中的build.gradle文件:

buildscript {
    ext {
        springBootVersion = '1.3.5.RELEASE'
    }
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springBootVersion}") 
    }
}

apply plugin: 'java'
apply plugin: 'eclipse-wtp'
apply plugin: 'spring-boot' 
apply plugin: 'war'


war {
    baseName = 'soffit-samples'
    version = '0.0.1-SNAPSHOT'
}
sourceCompatibility = 1.8
targetCompatibility = 1.8

repositories {
    mavenCentral()
}

configurations {
    providedRuntime
}

dependencies {
    compile('org.springframework.boot:spring-boot-starter-cache')
    compile('org.springframework.boot:spring-boot-starter-web')
    providedRuntime('org.springframework.boot:spring-boot-starter-tomcat')
    testCompile('org.springframework.boot:spring-boot-starter-test') 
}


eclipse {
    classpath {
         containers.remove('org.eclipse.jdt.launching.JRE_CONTAINER')
         containers 'org.eclipse.jdt.launching.JRE_CONTAINER/org.eclipse.jdt.internal.debug.ui.launcher.StandardVMType/JavaSE-1.8'
    }
}

项目本身(我的来源)包含为compile范围定义的2个依赖项:

  • org.springframework.boot:弹簧引导起动高速缓存
  • org.springframework.boot:弹簧引导起动的Web

这两个都是Spring依赖项。我想这些中的一个(或两个)使我的源可以直接或过渡地(可能是传递性的)访问@Autowired注释。

答案 2 :(得分:0)

仅供参考 - 我找到了解决方案。最好访问start.spring.io以生成gradle。

的build.gradle:

    buildscript {
    repositories {
        mavenCentral()
    }
    dependencies {
        classpath("org.springframework.boot:spring-boot-gradle-plugin:${springVersion}")
    }
}

apply plugin: 'java'
apply plugin: 'eclipse'
apply plugin: 'idea'
apply plugin: 'org.springframework.boot'

jar {
    baseName = 'gs-spring-boot'
    version =  '0.1.0'
}

repositories {
    mavenCentral()
}

sourceCompatibility = 1.8
targetCompatibility = 1.8

dependencies {
    compile('org.springframework.boot:spring-boot-autoconfigure')
    compile('org.springframework.boot:spring-boot-starter')
    testCompile('org.springframework.boot:spring-boot-starter-test')
    testCompile("junit:junit")
}

gradle.properties:

springVersion=1.5.8.RELEASE