Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Scripting java : import a class from an external file

I want to import a class that I already write in an external folder, for example : My class Example.java that is located in c:\class\Example.java to my script like using

var importedClass = new JavaImporter("c:\\class\\Example.java");

or

importClass("c:\\class\\Example.java");

this is in a script for ScriptEngine rhino
how can I do that ???

like image 717
Marouane Gazanayi Avatar asked Jun 22 '10 13:06

Marouane Gazanayi


People also ask

How do you import a class in Java?

In Eclipse or NetBeans just write the class you want to use and press on Ctrl + Space . The IDE will automatically import the class.

Can we create external JavaScript file and embed it in HTML?

We can create external JavaScript file and embed it in many html page. It provides code re usability because single JavaScript file can be used in several html pages. An external JavaScript file must be saved by .js extension.

How do you import a class in Python?

The import statement consists of the import keyword alongside the name of the module. Here we have created a class named GFG which has two methods: add () and sub (). Apart from that an explicit function is created named method () in the same python file.

How to create an external JavaScript file that prints Hello javatpoint?

An external JavaScript file must be saved by .js extension. It is recommended to embed all JavaScript files into a single file. It increases the speed of the webpage. Let's create an external JavaScript file that prints Hello Javatpoint in a alert dialog box. message.js. function msg () {. alert ("Hello Javatpoint");

How to import a module in Python?

The import statement consists of the import keyword alongside the name of the module. Here we have created a class named GFG which has two methods: add () and sub (). Apart from that an explicit function is created named method () in the same python file. This file will act as a module for the main python file.


1 Answers

I understand that you want to:

  1. Compile a Java source file
  2. Load the compiled code
  3. Use the resultant class in some JavaScript

The javax.tools package provides a mechanism for compiling code, though if you're not running in a JDK, ToolProvider.getSystemJavaCompiler() will return null and you'll have to rely on some other compilation mechanism (invoking an external compiler; embedding the Eclipse compiler; etc.).

Java bytecode (.class binaries) can be loaded at runtime via ClassLoaders.

In order for the loaded classes to be visible to your scripting engine, you'll need to provide them via the ScriptEngineManager(ClassLoader) constructor.


EDIT: based on the requirements

public class HelloWorld {
  public void say() {
    System.out.println("Hello, World!");
  }
}

This script just invokes the Java reflection API to load and instantiate a class HelloWorld.class from the C:\foo\bin directory:

function classImport() {
  var location = new java.net.URL('file:/C:/foo/bin/');
  var urlArray = java.lang.reflect.Array.newInstance(java.net.URL, 1);
  urlArray[0] = location;
  var classLoader = new java.net.URLClassLoader(urlArray);
  return classLoader.loadClass("HelloWorld");
}

var myClass = classImport();

for(var i=0; i<10; i++) {
  myClass.getConstructor(null).newInstance(null).say();
}

There are more elegant ways of doing this, I'm sure.

like image 146
McDowell Avatar answered Sep 23 '22 05:09

McDowell