问题标签 [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.
java - 覆盖生成的 Java 源代码中的行号
有没有办法覆盖 Java 中的行号(例如,通过使用某种预处理器指令)?
我正在“编译”一种高级语言,使用 Janino 编译成 Java 字节码。我需要编译器错误来报告原始文件中的行,而不是生成的 Java 代码。
C# 有#line 指令,我已经成功地利用它来将源文件中的行号映射到编译结果。我需要同样的Java。
谢谢!
java - Java 5 中的动态编译选项
除了 Janino 之外,还有其他选项可用于在 v5 中即时编译和执行 Java 代码吗?我知道 v6 有 Compiler API,但我需要使用 v5 VM。
我基本上需要获取一个包含完整 Java 类的字符串,对其进行编译并将其加载到内存中。
java - 动态 Java 编译:BeanShell、Janino、JavaCompiler?
我即将开始开发一个小型 Java 桌面应用程序。该应用程序只是一个引擎,用户为其提供 Java 类来完成工作(将输入转换为输出)。
我希望用户提供实际的 Java 类作为可以动态加载(和重新加载)的文件。
对于这种特殊用途, Java 是否比 Groovy 或 Beanshell 更麻烦?我不是要求比较 Groovy/Beanshell 和 Java,因为有很多。相反,我想知道与 Java 相比,从文件中动态加载 Groovy 或 Beanshell 类是否更容易。
对于 Java 1.6,JavaCompiler是动态加载代码的最佳方式吗?我想使用所有语言功能,所以我认为 Janino 已经出局了。另外,重载有什么问题吗?
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
spring - 用于集成测试的不同日志文件
我正在将SL4j和Logback用于托管在 Tomcat 中的 Web 应用程序。我使用 Spring 和 Maven(没有配置文件)。使用 Surefire 插件完成集成测试:
在 logback 配置中,我有一个基于文件的附加程序:
集成测试和 webapp 的日志文件是巧合分开的:对于集成测试,它是我项目的根目录,对于 webapp,它是 Eclipse 目录。所以我在 logback 配置中引入了一个日志文件位置:
if
结合现在的作品isDefined
,我在类路径上忘记了 Janino(感谢 Ceki)。集成测试日志输出和 Web 应用程序日志输出都在同一个日志文件中。所以我的问题:
如何分离集成测试 Web 应用程序的日志文件?我找到了这个链接,但我更喜欢只有配置的解决方案。我真的很想插入 Maven 属性。
更新 我的问题解决了。首先是logback配置:
appender 文件属性如下所示:
此解决方案中有两件事很奇怪:
- logback 认为属性为空时未定义。所以我不得不使用
"./"
而不是""
(空字符串)。 isDefined("catalina.home")
true
仅在 Tomcat(操作系统是 Windows)中启动时才会产生结果。不知道为什么要定义“catalina.home”,我有一个名为“CATALINA_HOME”的环境变量,但它似乎表明 TomCat 在启动时设置了“catalina.home”。
我仍然想在 logback 配置(项目根目录)中插入一个 Maven var,但恐怕我必须接受上面的解决方案。
logback - 条件功能在 Logback 中是如何工作的?
我使用这个 logback 配置文件:
运行我的应用程序时,我收到以下错误:
为什么方法isDefined
未知?logback 文档声明它应该存在,并且至少有一个堆栈溢出线程似乎在使用它。
我在我的类路径中包含了最新版本的 janino,因为它是评估表达式所必需的。如您在错误消息中所见,janino 编译器已加载。
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
这是我遇到的许多类似错误之一:
java - 如何在运行时从字符串表示创建 Java 对象
例如,如果我有一个字符串"{1,2,3,4,5}"
,我想从该字符串中获取一个 int[] 对象。
我看过 Janino 和 Beanshell,但似乎找不到正确的方法让他们为我做这件事。
我正在寻找一种通用的解决方案,它适用于所有类型——不仅是整数数组。
java - Janino ExpressionEvaluator 没有猜测所有参数?
考虑库的ExpressionEvaluator
类的一个简单用例Janino
,即当使用它来猜测表达式的参数时,如下所示:
虽然以上对于我使用过的任何类型的表达式(包括一些非常晦涩的表达式)都非常有效(100%),但如果任何参数以大写字母开头,则将其省略。
例如,表达式
aVar
如果传递给上述方法,将只产生 1 个参数 ( ),而Another
忽略另一个参数 ( )。
对这种行为有什么解释(例如,以大写字母开头的变量是否假定为类名)?
最重要的是,是否可以绕过所描述的行为(例如,通过某些配置选项)?
更新
显然,限制更普遍,影响所有以大写字母开头的参数。这是一个已知的 Janino 限制(或功能),如JANINO-151中所述并在相关讨论中提到。
事实上, Janino ExpressionEvaluator 类guessParameterNames()
的方法的源代码证实了这一点。
logback - Logback:“在类路径上找不到 Janino 库”
我收到错误消息Could not find Janino library on the class path. Skipping conditional processing.
我应该在类路径中包含什么来解决这个问题(lib 和版本)?