首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Janino编译了几个类

Janino编译了几个类
EN

Stack Overflow用户
提问于 2015-09-30 12:41:04
回答 1查看 987关注 0票数 1

我尝试过Janino,通过将字符串传递给janino编译器,我能够执行一个动态类。

现在,我应该动态创建几个类,然后将它们导入到另一个动态类中。

举个例子:

  • 从字符串编译A类
  • 从字符串编译B类
  • 创建类C,放在"import mypackage.A;import mypackage.B;等“中。
  • 编译C类

我如何才能取得这样的结果?

我的第一节动态课程是:

代码语言:javascript
复制
package com.Flink.POJO;
public class RainPOJO {
    private String Altitude;
    private String City_name;
    private String Latitude;
    private String Longitude;
    private String Rainfall;
    private String Station_name;
    private String Time;

    public String getAltitude() {
        return Altitude;
    }

    public void setAltitude(String Altitude) {
        this.Altitude = Altitude;
    }
    public String getCity_name() {
        return City_name;
    }
    public void setCity_name(String City_name) {
        this.City_name = City_name;
    }
    public String getLatitude() {
        return Latitude;
    }
    public void setLatitude(String Latitude) {
        this.Latitude = Latitude;
    }
    public String getLongitude() {
        return Longitude;
    }
    public void setLongitude(String Longitude) {
        this.Longitude = Longitude;
    }
    public String getRainfall() {
        return Rainfall;
    }
    public void setRainfall(String Rainfall) {
        this.Rainfall = Rainfall;
    }
    public String getStation_name() {
        return Station_name;
    }
    public void setStation_name(String Station_name) {
        this.Station_name = Station_name;
    }
    public String getTime() {
        return Time;
    }
    public void setTime(String Time) {
        this.Time = Time;
    }
}

然后,我必须从以下类调用该类,动态生成该类:

代码语言:javascript
复制
import org.apache.flink.api.common.functions.MapFunction;
import java.util.ArrayList;
import com.google.gson.JsonObject;
import org.apache.flink.api.java.DataSet;
import org.apache.flink.api.java.ExecutionEnvironment;
import org.apache.flink.api.java.tuple.Tuple2;
import org.apache.flink.api.common.operators.base.JoinOperatorBase;
import com.Flink.POJO.RainPOJO;
public class FlinkExecutor {
    public FlinkExecutor() {}
    public static void main(String[] args) throws Exception {
        final ExecutionEnvironment env =  ExecutionEnvironment.getExecutionEnvironment();
        env.setDegreeOfParallelism(1);

        Source Rain = new Source("sensor", "rain");
        String path_Rain = Rain.getCSVPath();
        DataSet < RainPOJO > ds_s1 = env.readCsvFile("file://" + path_Rain)
        .ignoreFirstLine()
        .pojoType(RainPOJO.class, "table", "time", "longitude", "latitude", "average_rainfall", "maximum_rainfall");
        ds_s1.map(new MapRain(ds_s1.count()))
        .print();
    }
}

要编译我使用的第一个类:

代码语言:javascript
复制
SimpleCompiler compiler = new SimpleCompiler();
compiler.cook(p_class);
ClassLoader classloader = compiler.getClassLoader();            
try {
    Class<?> cl = classloader.loadClass("com.Flink.POJO.RainPOJO");         
} catch (ClassNotFoundException e1) {
    e1.printStackTrace();
}   

对于第二个类,它包含了主要的方法:

代码语言:javascript
复制
    SimpleCompiler compiler = new SimpleCompiler(); 
    compiler.cook(this.allClass);
    try {
        Class<?> cl = compiler.getClassLoader().loadClass("FlinkExecutor");
         Method mainMeth = cl.getMethod("main", new Class[] { String[].class });
         String[] methArgs = new String[] { "" }; // one input
         mainMeth.invoke(null, new Object[] { methArgs });

    } catch (ClassNotFoundException | NoSuchMethodException | SecurityException | IllegalAccessException | IllegalArgumentException e) {
        e.printStackTrace();
    }

我得到的错误是:

org.codehaus.commons.compiler.CompileException:第8行,第7列:找不到类“com.Flink.POJO.RainPOJO”

Janino找不到类导入声明。

谢谢你,贾科莫

EN

回答 1

Stack Overflow用户

发布于 2019-09-19 11:30:15

从第一个编译器获取类加载器,使用setParentClassLoader()将其设置为第二个编译器

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/32866390

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档