相关疑难解决方法(0)

如何动态编译和加载外部java类?

(这个问题类似于我看过的很多问题,但大多数问题对我正在做的事情都不够具体)

背景:

我的程序的目的是让使用我的程序的人轻松制作自定义"插件",然后编译并加载到程序中以供使用(与我的程序中实现的不完整,慢速解析器相比).我的程序允许用户将代码输入到预定义的类中,该类扩展了与我的程序一起打包的编译类.他们将代码输入到文本窗格中,然后我的程序将代码复制到被覆盖的方法中.然后将其保存为.java文件(几乎)为编译器准备好了.该程序运行javac(java编译器),并将保存的.java文件作为输入.

我的问题是,我如何得到它,以便客户端(使用我的编译程序)将这个java文件(扩展我的InterfaceExample)保存在他们的计算机上的任何地方,让我的程序编译它(不说"找不到符号:InterfaceExample" )然后加载它并调用doSomething()方法?

我一直在看Q&A使用的是反射或ClassLoader,几乎描述了如何编译它,但没有一个对我来说足够详细/我完全不理解它们.

java load compilation external dynamic

42
推荐指数
2
解决办法
4万
查看次数

JRE和JDK都需要运行JAR文件吗?

可以在本地运行JAR文件.下一步是在另一台PC上运行它.

问题是JRE,JDK或两者是否都需要运行JAR文件?

java jar

15
推荐指数
1
解决办法
3万
查看次数

从Java中的字符串运行代码

出于调试原因,我希望能够运行通过控制台输入的代码.例如:

BufferedReader br = new BufferedReader(new InputStreamReader(System.in));
while(true){
    String str = br.readLine(); //This can return 'a = 5;','b = "Text";' or 'pckg.example.MyClass.run(5);'
    if(str == null)
        return;
    runCode(str); //How would I do this?
}
Run Code Online (Sandbox Code Playgroud)

java

12
推荐指数
2
解决办法
6173
查看次数

从String编译java源代码而不写入文件

在这里,我找到了一些很好的例子:

// Prepare source somehow.
String source = "package test; public class Test { static { System.out.println(\"hello\"); } public Test() { System.out.println(\"world\"); } }";

// Save source in .java file.
File root = new File("/java"); // On Windows running on C:\, this is C:\java.
File sourceFile = new File(root, "test/Test.java");
sourceFile.getParentFile().mkdirs();
new FileWriter(sourceFile).append(source).close();

// Compile source file.
JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();
compiler.run(null, null, null, sourceFile.getPath());

// Load and instantiate compiled class.
URLClassLoader classLoader = URLClassLoader.newInstance(new URL[] { root.toURI().toURL() }); …
Run Code Online (Sandbox Code Playgroud)

java

12
推荐指数
1
解决办法
1467
查看次数

Java:使用注释在编译时生成自定义Java代码

如何使用注释在编译时编写带有自定义属性的Java内部类?

例如,我想要这个:

@Generate
class Person {
     String firstname, lastname;
}
Run Code Online (Sandbox Code Playgroud)

生成:

class Person {
    String firstname, lastname;

    public static class $Fields { 
           public static String firstname = "firstname";
           public static String lastname  = "lastname";
    } 
}
Run Code Online (Sandbox Code Playgroud)

我该如何编写界面:

@Retention(RetentionPolicy.SOURCE)
public @interface Generate {
     // ... 
}
Run Code Online (Sandbox Code Playgroud)

我知道我需要做一些AST转换才能让这个神奇.

我也知道项目lombok,但我想通过一个简单的例子知道最不常见的分母,最好是在一个方法中,最好是一个好的编辑器会自动考虑的东西,例如Javac编译器的RetentionPolicy.SOURCE,可以在Intellij IDEA中使用.

项目lombok是一个明智的野兽代码,是一个艰难的起点.

它必须比那更简单,不是吗?

有任何想法吗?

java java-8

9
推荐指数
1
解决办法
1879
查看次数

从字符串编译Java源代码?

有没有办法让正在运行的Java程序编译Java源代码(作为字符串传递)?

Class newClass = Compiler.compile ("class ABC { void xyz {etc. etc. } }");
Run Code Online (Sandbox Code Playgroud)

理想情况下,传入源代码引用的任何类都将由程序的类加载器解析.

这样的事情存在吗?

java compiler-construction

8
推荐指数
1
解决办法
1万
查看次数

在RunTime期间生成JAR文件

我刚刚创建了一个简单的java应用程序,它将为我们的数据库生成实体类.我将保存到本地光盘的那些java类.到目前为止一切正常.

现在我想从我的主应用程序中的那些java类生成一个JAR文件.我知道,我可以操作jar文件,我还读到了在运行时将类添加到jar文件.

但就我而言,我的构建路径中没有类.我需要的是从刚刚创建的java文件创建类文件并将它们放入我的jar文件中.

这可能在我的java应用程序中吗?

我这样做的原因是我们的数据库将一直由许多人扩展,我不想手动将这些字段添加到我的实体.所以我想创建一个从我们的数据库中扫描systables的应用程序,并从这些信息中生成java实体文件.但是现在我需要在生成它们之后在类文件中编译这些java文件并将它们添加到我的最终jar文件中.

感谢您提供有关此问题的任何帮助和/或信息.

许多问候,霍克

java jar

7
推荐指数
1
解决办法
6209
查看次数

将String转换为Java中的代码

可能重复:
当方法名称为字符串时,如何调用java方法?
如何以编程方式编译和实例化Java类?

我有一个功能:

fun1() {
  System.out.print("hello");
}
Run Code Online (Sandbox Code Playgroud)

我想从用户或文件中读取一个字符串,如果"fun1()"出现该字符串,我会调用fun1.

我不想用switch语句来做这个,因为我有很多功能.

有什么方法可以使用字符串调用函数吗?

java

7
推荐指数
2
解决办法
3018
查看次数

Kotlin在运行时从源代码动态编译类

是否可以在运行时编译和实例化Kotlin类?我正在谈论类似的事情,但是使用Kotlin API:如何以编程方式编译和实例化Java类?

例如:我正在获得完整的类定义为String:

val example = "package example\n" +
        "\n" +
        "fun main(args: Array<String>) {\n" +
        "    println(\"Hello World\")\n" +
        "}\n"
Run Code Online (Sandbox Code Playgroud)

然后将其插入某个class.kt中并运行它,以便在运行时在控制台中打印“ Hello World”。

kotlin

6
推荐指数
1
解决办法
1925
查看次数

如何在Java程序中运行Java源代码

我编写了一些代码来编译Java源代码.然后它生成.class文件.问题是我该如何运行它?

例如,我对正在设置的程序和类的名称没问题,我使用了prog p = new prog(),但是,在这种情况下,类文件在编译之前还不存在.不太确定该怎么做.有人可以给我一个建议吗?

顺便说一句,这个类看起来像这样:

public void compile{
  JavaCompiler compiler = ToolProvider.getSystemJavaCompiler();  
  int compilationResult = compiler.run(null, null, null, fileToCompile);  
}

public void run(){
  Prog prog = new Prog();
  prog.run();
}
Run Code Online (Sandbox Code Playgroud)

java compiler-construction

5
推荐指数
1
解决办法
9602
查看次数