为什么 gradle 找不到 AspectJ 包
Why gradle is not finding AspectJ packages
我在SpringBoot中训练AOP
因此,为了使用 AspectJ 注释,我添加了 runtimeOnly 'org.aspectj:aspectjweaver:1.9.7'
进入我的 gradle 依赖项部分。
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'br.com.wviana'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'org.aspectj:aspectjweaver:1.9.7'
}
test {
useJUnitPlatform()
}
我的看点class如下:
package br.com.wviana.demo;
import java.util.logging.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class DemoApplicationAspec {
private Logger logger = Logger.getLogger(getClass().getName());
@Pointcut("execution(* br.com.wviana.demo.GreetingController.greeting(..))")
private void forGreeting() { }
@Before("forGreeting()")
public void beforeGreeting(JoinPoint theJoinPoint) {
String methodName = theJoinPoint.getSignature().toShortString();
logger.info("====> in @Before: " + methodName);
}
}
我的编辑器已经识别出自动完成中的注释。我使用带有 jdts 的 neovim 作为语言服务器。
但是当我尝试使用 ./gradlew bootRun
运行 项目时,我得到了跟随错误
> Task :compileJava FAILED
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:5: error: package org.aspectj.lang does not exist
import org.aspectj.lang.JoinPoint;
^
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:6: error: package org.aspectj.lang.annotation does not
exist
import org.aspectj.lang.annotation.Aspect;
^
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:7: error: package org.aspectj.lang.annotation does not
exist
import org.aspectj.lang.annotation.Before;
^
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:8: error: package org.aspectj.lang.annotation does not
exist
import org.aspectj.lang.annotation.Pointcut;
^
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:11: error: cannot find symbol
@Aspect
^
symbol: class Aspect
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:21: error: cannot find symbol
public void beforeGreeting(JoinPoint theJoinPoint) {
^
symbol: class JoinPoint
location: class DemoApplicationAspec
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:17: error: cannot find symbol
@Pointcut("execution(* br.com.wviana.demo.GreetingController.greeting(..))")
^
symbol: class Pointcut
location: class DemoApplicationAspec
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:20: error: cannot find symbol
@Before("forGreeting()")
^
symbol: class Before
location: class DemoApplicationAspec
8 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 1s
1 actionable task: 1 executed
我是不是漏掉了什么?
尝试将 id "io.freefair.aspectj" version "5.3.3.3"
添加到插件部分
和外部插件部分
targetCompatibility = '11'
sourceSets.main.aspectj.srcDir "src/main/java"
sourceSets.main.java.srcDirs = files()
在 compile
上更改 runtimeOnly
并添加
implementation "org.aspectj:aspectjrt:1.9.7"
您的文件将如下所示
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id "io.freefair.aspectj" version "5.3.3.3"
}
group = 'br.com.wviana'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
targetCompatibility = '11'
sourceSets.main.aspectj.srcDir "src/main/java"
sourceSets.main.java.srcDirs = files()
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation "org.aspectj:aspectjrt:1.9.7"
implementation "org.aspectj:aspectjweaver:1.9.7"
}
test {
useJUnitPlatform()
}
我在SpringBoot中训练AOP
因此,为了使用 AspectJ 注释,我添加了 runtimeOnly 'org.aspectj:aspectjweaver:1.9.7'
进入我的 gradle 依赖项部分。
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
}
group = 'br.com.wviana'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
runtimeOnly 'org.aspectj:aspectjweaver:1.9.7'
}
test {
useJUnitPlatform()
}
我的看点class如下:
package br.com.wviana.demo;
import java.util.logging.Logger;
import org.aspectj.lang.JoinPoint;
import org.aspectj.lang.annotation.Aspect;
import org.aspectj.lang.annotation.Before;
import org.aspectj.lang.annotation.Pointcut;
import org.springframework.stereotype.Component;
@Aspect
@Component
public class DemoApplicationAspec {
private Logger logger = Logger.getLogger(getClass().getName());
@Pointcut("execution(* br.com.wviana.demo.GreetingController.greeting(..))")
private void forGreeting() { }
@Before("forGreeting()")
public void beforeGreeting(JoinPoint theJoinPoint) {
String methodName = theJoinPoint.getSignature().toShortString();
logger.info("====> in @Before: " + methodName);
}
}
我的编辑器已经识别出自动完成中的注释。我使用带有 jdts 的 neovim 作为语言服务器。
但是当我尝试使用 ./gradlew bootRun
运行 项目时,我得到了跟随错误
> Task :compileJava FAILED
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:5: error: package org.aspectj.lang does not exist
import org.aspectj.lang.JoinPoint;
^
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:6: error: package org.aspectj.lang.annotation does not
exist
import org.aspectj.lang.annotation.Aspect;
^
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:7: error: package org.aspectj.lang.annotation does not
exist
import org.aspectj.lang.annotation.Before;
^
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:8: error: package org.aspectj.lang.annotation does not
exist
import org.aspectj.lang.annotation.Pointcut;
^
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:11: error: cannot find symbol
@Aspect
^
symbol: class Aspect
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:21: error: cannot find symbol
public void beforeGreeting(JoinPoint theJoinPoint) {
^
symbol: class JoinPoint
location: class DemoApplicationAspec
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:17: error: cannot find symbol
@Pointcut("execution(* br.com.wviana.demo.GreetingController.greeting(..))")
^
symbol: class Pointcut
location: class DemoApplicationAspec
/Users/wesley.viana/Repos/springboot-demo/src/main/java/br/com/wviana/demo/DemoApplicationAspec.java:20: error: cannot find symbol
@Before("forGreeting()")
^
symbol: class Before
location: class DemoApplicationAspec
8 errors
FAILURE: Build failed with an exception.
* What went wrong:
Execution failed for task ':compileJava'.
> Compilation failed; see the compiler error output for details.
* Try:
Run with --stacktrace option to get the stack trace. Run with --info or --debug option to get more log output. Run with --scan to get full insights.
* Get more help at https://help.gradle.org
BUILD FAILED in 1s
1 actionable task: 1 executed
我是不是漏掉了什么?
尝试将 id "io.freefair.aspectj" version "5.3.3.3"
添加到插件部分
和外部插件部分
targetCompatibility = '11'
sourceSets.main.aspectj.srcDir "src/main/java"
sourceSets.main.java.srcDirs = files()
在 compile
上更改 runtimeOnly
并添加
implementation "org.aspectj:aspectjrt:1.9.7"
您的文件将如下所示
plugins {
id 'org.springframework.boot' version '2.5.4'
id 'io.spring.dependency-management' version '1.0.11.RELEASE'
id 'java'
id "io.freefair.aspectj" version "5.3.3.3"
}
group = 'br.com.wviana'
version = '0.0.1-SNAPSHOT'
sourceCompatibility = '11'
targetCompatibility = '11'
sourceSets.main.aspectj.srcDir "src/main/java"
sourceSets.main.java.srcDirs = files()
repositories {
mavenCentral()
}
dependencies {
implementation 'org.springframework.boot:spring-boot-starter-web'
testImplementation 'org.springframework.boot:spring-boot-starter-test'
implementation "org.aspectj:aspectjrt:1.9.7"
implementation "org.aspectj:aspectjweaver:1.9.7"
}
test {
useJUnitPlatform()
}