2013-10-15 50 views
1

我想使用Java TM Scripting Engines,但不使用JavaScript。我想使用ScriptEngine for Java语言。我在所有解释中找到了文章。但我无法运行示例。基于Java的应用程序中Java代码的解释 - 如何在java程序中运行java代码

Maven依赖关系java引擎。

Java TM Scripting Engines - supports many different kinds of engines

当我尝试运行程序我得到:引擎错误(未知引擎)!

为什么ScriptEngineManager不能getEngineByName(“java”)?

也,谁知道另一个方法是如何创建的Java程序的Java解释器,请分享你的知识

package script; 

import javax.script.*; 

public class Main2 { 
    public static void main(String[] args) throws ScriptException { 
     ScriptEngineManager manager = new ScriptEngineManager(); 
     ScriptEngine engine = manager.getEngineByName("java"); 
     if (engine == null) { 
      System.err.println("Engine error (unknown engine)!"); 
     } else { 
      engine.put(ScriptEngine.FILENAME, "TestApp.java"); 
      engine.eval("public class TestApp { public static void main(String[] a) {System.out.println(\"hello!\");} }"); 
     } 
    } 
} 

的pom.xml

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>alefemet</groupId> 
    <artifactId>script</artifactId> 
    <version>0.0.1-SNAPSHOT</version> 
    <name>script</name> 
    <dependencies> 
     <dependency> 
      <groupId>org.apache.commons</groupId> 
      <artifactId>commons-jexl</artifactId> 
      <version>2.1.1</version> 
     </dependency> 
     <dependency> 
      <groupId>org.mozilla</groupId> 
      <artifactId>rhino</artifactId> 
      <version>1.7R4</version> 
     </dependency> 
     <dependency> 
      <groupId>com.sun.script</groupId> 
      <artifactId>java-engine</artifactId> 
      <version>20080611</version> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <configuration> 
        <source>1.7</source> 
        <target>1.7</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
    <repositories> 
     <repository> 
      <id>asf</id> 
      <name>ASF</name> 
      <url>http://svn.apache.org/repos/asf/servicemix/m2-repo</url> 
     </repository> 
    </repositories> 
</project> 

C:\用户\ ROOT> Java的版本

java version "1.7.0_25" 
Java(TM) SE Runtime Environment (build 1.7.0_25-b17) 
Java HotSpot(TM) Client VM (build 23.25-b01, mixed mode, sharing) 

更新后:C:\ Users \ RooT> java -version

java version "1.7.0_40" 
Java(TM) SE Runtime Environment (build 1.7.0_40-b43) 
Java HotSpot(TM) Client VM (build 24.0-b56, mixed mode, sharing) 

Java Scripting Programmer's Guide - javax.script

Article for java-engine

+0

哇!通常最好不要在标题中包含主要标签,但是您已经设法将它包括在内** 4次!**我不知道该如何处理这个混乱,所以我会保持原样。 :) –

+0

请将java -version输出添加到问题中 – WeMakeSoftware

回答

1

我遇到这可以解释Java中的唯一的事情就是BeanShell中,但还没有的,对于数年释放。最重要的是,这个功能似乎并没有很大的需求。

1

检查java-engine-20080611.jar后,我只能得出结论,JAR不在您的项目的运行时类路径中。或者JAR需要JDK并且您正在JRE中运行它 - 编译器驻留的JRE中没有tools.jar

与JavaScript或Groovy和其他Java脚本语言相比,Java不是一种脚本语言,有太多的语法。这就是为什么JAR中有JavaCompilerMemoryClassLoader类 - 需要编译脚本并加载生成的类。

相关问题