/
Process_Java.pm
53 lines (42 loc) · 1.42 KB
/
Process_Java.pm
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
package PerlDDS::Process_Java;
use strict;
use Env qw(JAVA_HOME DDS_ROOT ACE_ROOT TAO_ROOT);
use lib "$ACE_ROOT/bin";
use PerlACE::Process;
our @ISA = qw(PerlACE::Process);
PerlACE::add_lib_path("$DDS_ROOT/lib");
PerlACE::add_lib_path("$ACE_ROOT/lib") if $^O eq 'darwin';
## Constructor Arguments:
## 1. Main Class
## 2. Arguments to main() in Java as a string
## 3. Classpath as a Perl list reference, for example ['foo.jar', 'bar.jar']
## "classes" and the DDS libraries are already included.
## 4. VM arguments as an optional string, default is '-Xcheck:jni -ea'
sub new {
my($class, $main, $args, $classpath, $vmargs) = @_;
my $arguments = $vmargs ? $vmargs : '-Xcheck:jni -ea';
$main =~ s/[\/\\]/./g;
$main =~ s/\.class$//;
my @classpaths = ('classes', "$DDS_ROOT/lib/i2jrt.jar",
"$DDS_ROOT/lib/OpenDDS_DCPS.jar");
if (-e "$DDS_ROOT/lib/i2jrt_compact.jar") {
push(@classpaths, "$DDS_ROOT/lib/i2jrt_compact.jar");
}
if (defined $classpath) {
push(@classpaths, @$classpath);
}
my $sep = ':';
my $jnid;
if ($^O eq 'MSWin32') {
$sep = ';';
$jnid = ' -Dopendds.native.debug=true'
unless $PerlACE::Process::ExeSubDir =~ /Release/i;
}
$arguments .= ' -cp ' . join($sep, @classpaths) . $jnid . ' '
. $main . ' ' . $args;
my $self = $class->SUPER::new("$JAVA_HOME/bin/java", $arguments);
bless($self, $class);
$self->IgnoreExeSubDir(1);
return $self;
}
1;