问题标签 [janino]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
5 回答
1606 浏览

java - 覆盖生成的 Java 源代码中的行号

有没有办法覆盖 Java 中的行号(例如,通过使用某种预处理器指令)?

我正在“编译”一种高级语言,使用 Janino 编译成 Java 字节码。我需要编译器错误来报告原始文件中的行,而不是生成的 Java 代码。

C# 有#line 指令,我已经成功地利用它来将源文件中的行号映射到编译结果。我需要同样的Java。

谢谢!

0 投票
3 回答
1881 浏览

java - Java 5 中的动态编译选项

除了 Janino 之外,还有其他选项可用于在 v5 中即时编译和执行 Java 代码吗?我知道 v6 有 Compiler API,但我需要使用 v5 VM。

我基本上需要获取一个包含完整 Java 类的字符串,对其进行编译并将其加载到内存中。

0 投票
1 回答
2172 浏览

java - 动态 Java 编译:BeanShell、Janino、JavaCompiler?

我即将开始开发一个小型 Java 桌面应用程序。该应用程序只是一个引擎,用户为其提供 Java 类来完成工作(将输入转换为输出)。

我希望用户提供实际的 Java 类作为可以动态加载(和重新加载)的文件。

对于这种特殊用途, Java 是否比 Groovy 或 Beanshell 更麻烦?我不是要求比较 Groovy/Beanshell 和 Java,因为有很多。相反,我想知道与 Java 相比,从文件中动态加载 Groovy 或 Beanshell 类是否更容易。

对于 Java 1.6,JavaCompiler是动态加载代码的最佳方式吗?我想使用所有语言功能,所以我认为 Janino 已经出局了。另外,重载有什么问题吗?

注意:我已经看到了 thisthis,但我不确定他们是否回答了我的问题。

0 投票
1 回答
568 浏览

java - 无法让 Janino 编译器编译与 jar 相同目录中的文件

我正在使用 Janino 在运行时编译 java 文件以在程序中使用。我正在使用 netbeans,当我将目录放在 src 文件夹中时,我只能在运行时编译它。如果我尝试使用相对路径编译它,它将不起作用。

我正在关注http://docs.codehaus.org/display/JANINO/Advanced#Advanced-compiler上的示例

当我将要在运行时编译的文件放在 src 目录中名为 scripts 的文件夹中时,以下是有效的:

如果我将脚本文件夹放在与 jar 相同的目录中,它将不起作用。只有当我从 IDE 内部使用 src 目录中的脚本文件夹运行项目时,我才能让它工作。

当我尝试使用与 jar 文件位于同一文件夹中的脚本文件夹运行项目时,它会 AbstractEngine engine = (AbstractEngine) cl.loadClass(engineClass).newInstance();在行上给出 ClassNotFoundException

0 投票
2 回答
3381 浏览

spring - 用于集成测试的不同日志文件

我正在将SL4jLogback用于托管在 Tomcat 中的 Web 应用程序。我使用 Spring 和 Maven(没有配置文件)。使用 Surefire 插件完成集成测试:

在 logback 配置中,我有一个基于文件的附加程序:

集成测试和 webapp 的日志文件是巧合分开的:对于集成测试,它是我项目的根目录,对于 webapp,它是 Eclipse 目录。所以我在 logback 配置中引入了一个日志文件位置:

if结合现在的作品isDefined,我在类路径上忘记了 Janino(感谢 Ceki)。集成测试日志输出和 Web 应用程序日志输出都在同一个日志文件中。所以我的问题:

如何分离集成测试 Web 应用程序的日志文件?我找到了这个链接,但我更喜欢只有配置的解决方案。我真的很想插入 Maven 属性。

更新 我的问题解决了。首先是logback配置:

appender 文件属性如下所示:

此解决方案中有两件事很奇怪:

  1. logback 认为属性为空时未定义。所以我不得不使用"./"而不是""(空字符串)。
  2. isDefined("catalina.home")true仅在 Tomcat(操作系统是 Windows)中启动时才会产生结果。不知道为什么要定义“catalina.home”,我有一个名为“CATALINA_HOME”的环境变量,但它似乎表明 TomCat 在启动时设置了“catalina.home”。

我仍然想在 logback 配置(项目根目录)中插入一个 Maven var,但恐怕我必须接受上面的解决方案。

0 投票
1 回答
16724 浏览

logback - 条件功能在 Logback 中是如何工作的?

我使用这个 logback 配置文件:

运行我的应用程序时,我收到以下错误:

为什么方法isDefined未知?logback 文档声明它应该存在,并且至少有一个堆栈溢出线程似乎在使用它。

我在我的类路径中包含了最新版本的 janino,因为它是评估表达式所必需的。如您在错误消息中所见,janino 编译器已加载。

0 投票
2 回答
7735 浏览

java - NoSuchMethodError

我在网上发现了类似的问题,但发布的解决方案似乎都不起作用。

我试图在 jetty 下运行我的 web 应用程序,而不是总是在 tomcat 中构建和运行来测试,因为我们的构建需要 18 分钟。:(

这是一个 drools 项目,我在 Eclipse Indigo SR2 下运行。我正在尝试在 Jetty 6.1.26 和 Spring Framework 2.5.6 下运行。

我在https://community.jboss.org/wiki/RulesTomcat的 vm args 部分中使用以下系统参数创建了调试配置:

-Djava.naming.factory.initial=org.mortbay.naming.InitialContextFactory -Ddrools.compiler=JANINO

这是我遇到的许多类似错误之一:

0 投票
3 回答
705 浏览

java - 如何在运行时从字符串表示创建 Java 对象

例如,如果我有一个字符串"{1,2,3,4,5}",我想从该字符串中获取一个 int[] 对象。

我看过 Janino 和 Beanshell,但似乎找不到正确的方法让他们为我做这件事。

我正在寻找一种通用的解决方案,它适用于所有类型——不仅是整数数组。

0 投票
0 回答
639 浏览

java - Janino ExpressionEvaluator 没有猜测所有参数?

考虑库的ExpressionEvaluator类的一个简单用例Janino,即当使用它来猜测表达式的参数时,如下所示:

虽然以上对于我使用过的任何类型的表达式(包括一些非常晦涩的表达式)都非常有效(100%),但如果任何参数以大写字母开头,则将其省略。

例如,表达式

aVar如果传递给上述方法,将只产生 1 个参数 ( ),而Another忽略另一个参数 ( )。

对这种行为有什么解释(例如,以大写字母开头的变量是否假定为类名)?

最重要的是,是否可以绕过所描述的行为(例如,通过某些配置选项)?


更新

显然,限制更普遍,影响所有以大写字母开头的参数。这是一个已知的 Janino 限制(或功能),如JANINO-151中所述并在相关讨论中提到。

事实上, Janino ExpressionEvaluator 类guessParameterNames()的方法的源代码证实了这一点。

0 投票
1 回答
16176 浏览

logback - Logback:“在类路径上找不到 Janino 库”

我收到错误消息Could not find Janino library on the class path. Skipping conditional processing.我应该在类路径中包含什么来解决这个问题(lib 和版本)?