开发者社区> 问答> 正文

springboot jar 启动 动态编译?报错

利用jdk1.6特性编译的java字符串得到的类,其中这个类还引入了项目中其它类对象。springboot 按照jar包启动方式,会报错找不到包和对象。直接用springboot run启动运行,根据字符串编译对象没问题,但是用jar启动就是报错,想了很多方法就是不行,可有其它方式,写了好久的牛逼功能结果卡在这儿了。。求助

展开
收起
爱吃鱼的程序员 2020-06-05 15:41:59 1672 0
1 条回答
写回答
取消 提交回答
  • https://developer.aliyun.com/profile/5yerqm5bn5yqg?spm=a2c6h.12873639.0.0.6eae304abcjaIB
                        <p>你把jar解压看看,应该是没有那些包和类的,这个问题我遇到过</p>
                    
    
                            本身其实就没有包,是使用JavaCompiler编译器在内存中把sting字符串编译然后通过类加载器去加载的对象
                        
    
                        你看target里面有没有你需要的那个包啊 如果没有 看看maven打包时候 是不是有啥问题
                    
    
                            jar包解压后里面lib目录下依赖对象都有,编译报错找不到包的的对象是存在的,只是使用JavaCompiler编译器编译的对象找不到那些依赖对象
                        
    
                        <p>请问你这个问题解决了吗,同遇</p>
                    
    
                            回复 <a class="referer" target="_blank">@林荫小憩</a>  : 数据库的数据也可以直接通过maven插件读取的,代码自动生成就是读取数据库字段去生成文件的
                        
    
                            回复 <a class="referer" target="_blank">@青宇0223</a>  : 直接将字符串通过maven插件生成好文件?我这字符串是存数据库中,动态获取的。
                        
    
                            没解决,放弃了,改成maven插件了,直接在编译之前,通过maven插件,生成好文件,然后编译到jar包里面
                        
    
                        <p>吧需要引入的jar包 放到一个lib目录下,然后编译的时候加上这些jar包的路径即可.我现在想让他直接读取springboot的boot info下的lib 还不知道怎么实现</p> 
    
    JavaFileObject javaFileObject = manager.makeStringSource(className, javaStr);
    Iterable<String> options  = null;
    if(isJar())
    {
        options = Arrays.asList( "-classpath", getJarFiles(getPath()) );
    }
    JavaCompiler.CompilationTask task = compiler.getTask(null, manager, null, options, null, Arrays.asList(javaFileObject));
    2020-06-05 15:42:11
    赞同 展开评论 打赏
问答排行榜
最热
最新

相关电子书

更多
Java Spring Boot开发实战系列课程(第17讲):Spring Boot 2.0实战Docker容器Linux 立即下载
使用Spring.Initializr定制工程脚手架 立即下载
陈曦:使用Spring.Initializr定制工程脚手架 立即下载