use
lib
'/home/phil/Java/Build/blib/lib'
;
my
@attrs
= (
{
PROJECT_DIR
=>
sub
{
die
"please supply a PROJECT_DIR\n"
; } },
{
PROJECTS
=>
sub
{
die
"please supply a PROJECTS list\n"
; } },
{
BUILD_SUCCESS
=>
sub
{
die
"please supply a BUILD_SUCCESS file\n"
; } },
);
sub
new {
my
$class
=
shift
;
my
$self
=
shift
;
$self
->{ATTRIBUTES} = (\
@attrs
);
Java::Build::GenericBuild::process_attrs(
$self
);
return
bless
$self
,
$class
;
}
sub
init {
my
$self
=
shift
;
open
LOG,
">>demo.log"
or
die
"couldn't open log\n"
;
}
sub
compile {
my
$self
=
shift
;
print
LOG
"compiling...\n"
;
my
$compiler
= Java::Build::JVM->getCompiler();
foreach
my
$project
(@{
$self
->{PROJECTS}}) {
my
$base_dir
=
"$self->{PROJECT_DIR}/$project->{NAME}"
;
my
$sources
= build_file_list(
BASE_DIR
=>
$base_dir
,
INCLUDE_PATTERNS
=> [
qr/.java$/
],
);
print
LOG
"compiling $base_dir @$sources\n"
;
$compiler
->destination(
$base_dir
);
eval
{
$compiler
->compile(
$sources
) };
if
($@) {
print
LOG
"compile failed:\n$@"
;
die
"compile failed\n"
;
}
$compiler
->append_to_classpath(
$base_dir
);
}
}
sub
make_jars {
my
$self
=
shift
;
print
LOG
"making jars...\n"
;
foreach
my
$project
(@{
$self
->{PROJECTS}}) {
next
if
(
defined
$project
->{DONT_JAR} and
$project
->{DONT_JAR});
my
$base_dir
=
"$self->{PROJECT_DIR}/$project->{NAME}"
;
my
$classes
= build_file_list(
BASE_DIR
=>
$base_dir
,
EXCLUDE_PATTERNS
=> [
qr/.java$/
],
STRIP_BASE_DIR
=> 1,
QUOTE_DOLLARS
=> 1,
);
print
LOG
"making jar for $project->{NAME} with @$classes\n"
;
jar(
JAR_FILE
=>
"$base_dir.jar"
,
BASE_DIR
=>
$base_dir
,
FILE_LIST
=>
$classes
,
);
}
}
sub
DESTROY {
print
LOG
"build complete\n"
;
close
LOG;
}