让我们从文件/home/foo/java_src/Hello.java开始,它包含:
public class Hello {
public Hello() {}
public void instance_hello() { System.out.println("hello world"); }
public static void static_hello() { System.out.println("HELLO WORLD"); }
}
首先解决您的第二个问题,use Inline Java ... 之后的第一个参数可以是文件名,因此您可以将源文件放在任何地方并在 perl 代码中通过其文件名引用它:
use Inline Java => '/home/foo/java_src/Hello.java';
$obj = Hello->new();
$obj->instance_hello(); # "hello world"
Hello->static_hello(); # "HELLO WORLD"
请注意,目前您不需要STUDY。 Hello 类在源代码中定义,由 Inline::Java 模块直接读取,因此该模块会自动创建并填充 Perl 中的 Hello 命名空间。
STUDY 用于Inline::Java 不直接解析的类。因此,假设我们的Hello 类已被编译成一个名为/home/foo/jars/hello.jar 的jar 文件。现在要使用 Hello 类,您需要 (1) 在 CLASSPATH 中包含 hello.jar 和 (2) 使用 STUDY 告诉 Inline::Java 创建 Hello 命名空间:
use Inline Java => 'STUDY',
CLASSPATH => '/home/foo/jars/hello.jar',
STUDY => ['Hello'];
$obj = Hello->new;
Hello->static_hello; # "HELLO WORLD"
$obj->instance_hello; # "hello world"
我们包含第一个参数STUDY 以向Inline::Java 发出信号,表明我们没有将任何源代码直接传递给模块。我们也可以传递有效的源代码或有效的源代码文件名。
use Inline Java => 'public class Nothing() { }',
CLASSPATH => '/home/foo/jars/hello.jar',
STUDY => ['Hello'];