litongjava / jfinal-aop

MIT License
1 stars 0 forks source link

jdk21好像不能用 #1

Closed xingmu closed 9 months ago

xingmu commented 9 months ago

方法上配置@Before(Interceptor.class)就报错了

litongjava commented 9 months ago

你把详细的错误发一下呀。 还没有对jdk21适配。 你的版本号也发一下。

On Tue, Nov 28, 2023, 6:31 AM xingmu @.***> wrote:

@.*** https://github.com/before(Interceptor.class)就报错了

— Reply to this email directly, view it on GitHub https://github.com/litongjava/jfinal-aop/issues/1, or unsubscribe https://github.com/notifications/unsubscribe-auth/AHSKMPKW6ILKQUJWI66KSUTYGYGXTAVCNFSM6AAAAAA76BUCWOVHI2DSMVQWIX3LMV43ASLTON2WKOZSGAYTIOBTHE4DQNA . You are receiving this because you are subscribed to this thread.Message ID: @.***>

xingmu commented 9 months ago

public class Aspect1 implements Interceptor {

@Override
public void intercept(Invocation invocation) {
    System.out.println("Before Aspect1 invoking");
    invocation.invoke();
    System.out.println("After Aspect1 invoking");
}

}

public class Cat { @Before(Aspect1.class) public void eat() { System.out.println("cat eat"); } }

public static void main(String[] args) {
    // ProxyManager.me().setProxyFactory(new CglibProxyFactory());
    Cat cat = Aop.get(Cat.class);
    cat.eat();
}
com.litongjava jfinal-aop 1.0.7

Exception in thread "main" java.lang.RuntimeException: java.lang.IllegalStateException: source field can not be null at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:168) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94) at com.litongjava.jfinal.proxy.ProxyCompiler.compile(ProxyCompiler.java:140) at com.litongjava.jfinal.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:69) at com.litongjava.jfinal.proxy.ProxyFactory.get(ProxyFactory.java:41) at com.litongjava.jfinal.proxy.Proxy.get(Proxy.java:26) at com.litongjava.jfinal.aop.AopFactory.createObject(AopFactory.java:174) at com.litongjava.jfinal.aop.AopFactory.doGetSingleton(AopFactory.java:92) at com.litongjava.jfinal.aop.AopFactory.doGet(AopFactory.java:66) at com.litongjava.jfinal.aop.AopFactory.get(AopFactory.java:49) at com.litongjava.jfinal.aop.Aop.get(Aop.java:87) at AopTest.main(AopTest.java:6) Caused by: java.lang.IllegalStateException: source field can not be null at com.litongjava.jfinal.proxy.ProxyCompiler$MyJavaFileObject.getCharContent(ProxyCompiler.java:190) at jdk.compiler/com.sun.tools.javac.api.ClientCodeWrapper$WrappedFileObject.getCharContent(ClientCodeWrapper.java:673) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.readSource(JavaCompiler.java:617) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.parse(JavaCompiler.java:689) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:1038) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler$InitialFileParser.parse(JavaCompiler.java:1972) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.parseFiles(JavaCompiler.java:1025) at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:951) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104) at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.invocationHelper(JavacTaskImpl.java:152) ... 12 more

litongjava commented 9 months ago

已解决,测试成功

Before Aspect1 invoking
cat eat
After Aspect1 invoking

请更新到v1.0.8

    <dependency>
      <groupId>com.litongjava</groupId>
      <artifactId>jfinal-aop</artifactId>
      <version>1.0.8</version>
    </dependency>

测试代码和工程

https://github.com/litongjava/java-ee-tio-boot-study/tree/main/jfinal-aop-study/src/main/java/com/issues01

复测成功后请关闭该issuue

litongjava commented 9 months ago
set JAVA_HOME=D:\\java\\jdk1.8.0_121
mvn clean install -DskipTests -Dgpg.skip

推送失败,下载安装到本地吧

xingmu commented 9 months ago

我环境变量配置的jdk21,包括pom里,编译都指定的是21。 我对底层的知识不太了解,还请指点。

2023-12-01 10:44:02.672 DEBUG【c.l.jfinal.proxy.ProxyGenerator.generate:144】- Generate proxy class ".Cat$$EnhancerByJFinal": package ; import com.litongjava.jfinal.aop.Invocation; public class Cat$$EnhancerByJFinal extends Cat {

public  void eat() {
    Invocation inv = new Invocation(this, 1L,
        args -> {
             Cat$$EnhancerByJFinal.super.eat(
                );
            return null;
        }
        );

    inv.invoke();
}

}

2023-12-01 10:44:03.068 ERROR【c.l.jfinal.proxy.ProxyCompiler.lambda$outputCompileError$0:156】- 注: 由于在类路径中发现了一个或多个处理程序,因此启用了 批注处理。未来发行版的 javac 可能会禁用批注处理, 除非至少按名称指定了一个处理程序 (-processor), 或指定了搜索路径 (--processor-path, --processor-module-path), 或显式启用了批注处理 (-proc:only, -proc:full)。 可使用 -Xlint:-options 隐藏此消息。 可使用 -proc:none 禁用批注处理。 2023-12-01 10:44:03.069 ERROR【c.l.jfinal.proxy.ProxyCompiler.lambda$outputCompileError$0:156】- /Cat$$EnhancerByJFinal.java:2: 错误: 需要<标识符> package ; ^ Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: .Cat$$EnhancerByJFinal at com.litongjava.jfinal.proxy.ProxyClassLoader.loadProxyClass(ProxyClassLoader.java:51) at com.litongjava.jfinal.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:70) at com.litongjava.jfinal.proxy.ProxyFactory.get(ProxyFactory.java:41) at com.litongjava.jfinal.proxy.Proxy.get(Proxy.java:26) at com.litongjava.jfinal.aop.AopFactory.createObject(AopFactory.java:174) at com.litongjava.jfinal.aop.AopFactory.doGetSingleton(AopFactory.java:92) at com.litongjava.jfinal.aop.AopFactory.doGet(AopFactory.java:66) at com.litongjava.jfinal.aop.AopFactory.get(AopFactory.java:49) at com.litongjava.jfinal.aop.Aop.get(Aop.java:87) at AopTest.main(AopTest.java:6) Caused by: java.lang.ClassNotFoundException: .Cat$$EnhancerByJFinal at java.base/java.lang.ClassLoader.findClass(ClassLoader.java:733) at com.litongjava.jfinal.proxy.ProxyClassLoader.findClass(ProxyClassLoader.java:64) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593) at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526) at com.litongjava.jfinal.proxy.ProxyClassLoader.loadProxyClass(ProxyClassLoader.java:49) ... 9 more

litongjava commented 9 months ago

请问你升级了吗?有没有升到1.0.8版本?

xingmu commented 9 months ago

升级了

litongjava commented 9 months ago

你切到到jdk8看一下是否报错?

On Thu, Nov 30, 2023, 5:00 PM xingmu @.***> wrote:

升级了

— Reply to this email directly, view it on GitHub https://github.com/litongjava/jfinal-aop/issues/1#issuecomment-1835377882, or unsubscribe https://github.com/notifications/unsubscribe-auth/AHSKMPMEANLZPFHE4VHP4FDYHFB6NAVCNFSM6AAAAAA76BUCWOVHI2DSMVQWIX3LMV43OSLTON2WKQ3PNVWWK3TUHMYTQMZVGM3TOOBYGI . You are receiving this because you commented.Message ID: @.***>

litongjava commented 9 months ago

我测试了N遍,Jdk 21正常.

java-version:21.0.1
Before Aspect1 invoking
cat eat
After Aspect1 invoking

要不你下载这个工程测试一下 https://github.com/litongjava/java-ee-tio-boot-study/tree/main/jfinal-aop-study/

litongjava commented 9 months ago

你的反馈要写的规范一些 代码和和错误日志要分开,有问题在和我联系

xingmu commented 9 months ago

估计还是我的配置有问题,我把你的项目下载下来看看 我的pom.xml

    <properties>
        <java.version>21</java.version>
        <maven.compiler.source>${java.version}</maven.compiler.source>
        <maven.compiler.target>${java.version}</maven.compiler.target>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
    </properties>
    <dependencies>
        <dependency>
            <groupId>com.litongjava</groupId>
            <artifactId>jfinal-aop</artifactId>
            <version>1.0.8</version>
        </dependency>
    </dependencies>

系统环境变量、idea、maven、编译器、项目模块、sdk等都设置的21

代码没变,运行报错

java-version:21
SLF4J: Failed to load class "org.slf4j.impl.StaticLoggerBinder".
SLF4J: Defaulting to no-operation (NOP) logger implementation
SLF4J: See http://www.slf4j.org/codes.html#StaticLoggerBinder for further details.
Exception in thread "main" java.lang.RuntimeException: java.lang.ClassNotFoundException: .Cat$$EnhancerByJFinal
    at com.litongjava.jfinal.proxy.ProxyClassLoader.loadProxyClass(ProxyClassLoader.java:51)
    at com.litongjava.jfinal.proxy.ProxyFactory.getProxyClass(ProxyFactory.java:70)
    at com.litongjava.jfinal.proxy.ProxyFactory.get(ProxyFactory.java:41)
    at com.litongjava.jfinal.proxy.Proxy.get(Proxy.java:26)
    at com.litongjava.jfinal.aop.AopFactory.createObject(AopFactory.java:174)
    at com.litongjava.jfinal.aop.AopFactory.doGetSingleton(AopFactory.java:92)
    at com.litongjava.jfinal.aop.AopFactory.doGet(AopFactory.java:66)
    at com.litongjava.jfinal.aop.AopFactory.get(AopFactory.java:49)
    at com.litongjava.jfinal.aop.Aop.get(Aop.java:87)
    at AopTest.main(AopTest.java:8)
Caused by: java.lang.ClassNotFoundException: .Cat$$EnhancerByJFinal
    at java.base/java.lang.ClassLoader.findClass(ClassLoader.java:733)
    at com.litongjava.jfinal.proxy.ProxyClassLoader.findClass(ProxyClassLoader.java:64)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:593)
    at java.base/java.lang.ClassLoader.loadClass(ClassLoader.java:526)
    at com.litongjava.jfinal.proxy.ProxyClassLoader.loadProxyClass(ProxyClassLoader.java:49)
    ... 9 more