Warning: file_get_contents(/data/phpspider/zhask/data//catemap/3/wix/2.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
janino编译Java代码抛出;找不到类异常“;_Java_Janino - Fatal编程技术网

janino编译Java代码抛出;找不到类异常“;

janino编译Java代码抛出;找不到类异常“;,java,janino,Java,Janino,背景 我使用squirrel状态机,并希望动态生成其关联类(状态、事件、上下文等)(状态可能会更改) 我试图在Springboot应用程序启动后生成并编译Java代码。 有四个文件A、B、C、D A、 B、C是简单的javabean,D扩展了外部lib类 示例代码如下所示: public void testCompile() throws Exception { String a = "package roa;\n" + "public e

背景

我使用
squirrel
状态机,并希望动态生成其关联类(状态、事件、上下文等)(状态可能会更改)

我试图在Springboot应用程序启动后生成并编译Java代码。 有四个文件A、B、C、D

A、 B、C是简单的javabean,D扩展了外部lib类

示例代码如下所示:

public void testCompile() throws Exception {
        String a = "package roa;\n" +
                    "public enum A{\n" +
                    "  Pass,\n" +
                    "  Refuse;\n" +
                    "}";
        String b = "package roa;\n" +
                    "public enum B{\n" +
                    "  Start,End;\n" +
                    "}";
        String c = "package roa;\n" +
                    "public class C{}";
        String d = "package roa;\n" +
                    "import org.squirrelframework.foundation.fsm.impl.AbstractStateMachine;\n" +
                    "public class D extends AbstractStateMachine<D,A,B,C> {}";

        ICompilerFactory compilerFactory = CompilerFactoryFactory.getDefaultCompilerFactory();
        ICompiler compiler = compilerFactory.newCompiler();
        Map<String, byte[]> classes = Maps.newHashMap();
        compiler.setClassFileCreator(new MapResourceCreator(classes));
        compiler.setClassFileFinder(new MapResourceFinder(classes));
        compiler.compile(new Resource[]{
                new StringResource("roa/A.java", a),
                new StringResource("roa/B.java", b),
                new StringResource("roa/C.java", c),
                new StringResource("roa/D.java", d)
        });
        ClassLoader cl = new ResourceFinderClassLoader(
                new MapResourceFinder(classes),
                ClassLoader.getSystemClassLoader()
        );
        System.out.println(cl.loadClass("roa.A"));
        System.out.println(cl.loadClass("roa.B"));
        System.out.println(cl.loadClass("roa.C"));
        System.out.println(cl.loadClass("roa.D"));
    }
使用的版本和依赖项:

  • IDE内外的Java
    1.8.0_202
  • Springboot
    Greenwich.RELEASE
贾尼诺依赖

<dependency>
     <groupId>org.codehaus.janino</groupId>
     <artifactId>janino</artifactId>
     <version>3.1.0</version>
</dependency>

org.codehaus.janino
,在IDE中运行良好,并且不能与
java-jar一起运行:(

我搜索了许多与我相似的问题,但没有一个答案适合我。 也许我用错了janino,但我不知道如何修复它

非常感谢您的回复


谢谢你,Zhhang

这可能只是一个依赖性问题。你是否使用任何
maven clean安装创建jar
?Make sur你的cmd maven版本与你的IDE使用的版本相似。是的,我使用
maven clean install
。maven版本在IDE和maven cmd中都是apache-maven-3.6.0。我也尝试过o运行IDE安装的jar,再次失败。您使用相同的JDK版本编译吗?是否可以使用IDE外部的maven build输出编辑问题。我已经添加了maven build outside的输出。JDK版本是相同的
<dependency>
     <groupId>org.codehaus.janino</groupId>
     <artifactId>janino</artifactId>
     <version>3.1.0</version>
</dependency>
zhhang@bogon mvn clean install
[INFO] Scanning for projects...
[INFO] 
[INFO] --------------------< com.demo.cloud:oa >---------------------
[INFO] Building oa 1.0-SNAPSHOT
[INFO] --------------------------------[ jar ]---------------------------------
[INFO] 
[INFO] --- maven-clean-plugin:3.1.0:clean (default-clean) @ oa ---
[INFO] Deleting /Users/zhhang/IdeaProjects/inno/oa/target
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:resources (default-resources) @ oa ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] Copying 1 resource
[INFO] Copying 17 resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:compile (default-compile) @ oa ---
[INFO] Changes detected - recompiling the module!
[INFO] Compiling 131 source files to /Users/zhhang/IdeaProjects/inno/oa/target/classes
[INFO] 
[INFO] --- maven-resources-plugin:3.1.0:testResources (default-testResources) @ oa ---
[INFO] Using 'UTF-8' encoding to copy filtered resources.
[INFO] skip non existing resourceDirectory /Users/zhhang/IdeaProjects/inno/oa/src/test/resources
[INFO] 
[INFO] --- maven-compiler-plugin:3.8.0:testCompile (default-testCompile) @ oa ---
[INFO] Nothing to compile - all classes are up to date
[INFO] 
[INFO] --- maven-surefire-plugin:2.22.1:test (default-test) @ oa ---
[INFO] Tests are skipped.
[INFO] 
[INFO] --- maven-jar-plugin:3.1.1:jar (default-jar) @ oa ---
[INFO] Building jar: /Users/zhhang/IdeaProjects/inno/oa/target/oa-1.0-SNAPSHOT.jar
[INFO] 
[INFO] --- spring-boot-maven-plugin:2.1.4.RELEASE:repackage (repackage) @ oa ---
[INFO] Replacing main artifact with repackaged archive
[INFO] 
[INFO] --- maven-install-plugin:2.5.2:install (default-install) @ oa ---
[INFO] Installing /Users/zhhang/IdeaProjects/inno/oa/target/oa-1.0-SNAPSHOT.jar to /Users/zhhang/.m2/repository/com/demo/cloud/oa/1.0-SNAPSHOT/oa-1.0-SNAPSHOT.jar
[INFO] Installing /Users/zhhang/IdeaProjects/inno/oa/pom.xml to /Users/zhhang/.m2/repository/com/demo/cloud/oa/1.0-SNAPSHOT/oa-1.0-SNAPSHOT.pom
[INFO] ------------------------------------------------------------------------
[INFO] BUILD SUCCESS
[INFO] ------------------------------------------------------------------------
[INFO] Total time:  9.087 s
[INFO] Finished at: 2020-03-10T10:57:48+08:00
[INFO] ------------------------------------------------------------------------