├── .gitignore
├── lib
├── ant
│ ├── rake.rb
│ ├── tasks
│ │ └── raketasks.rb
│ ├── target.rb
│ ├── element.rb
│ └── ant.rb
└── ant.rb
├── samples
├── java_src
│ └── A.java
├── rake_import_example
│ ├── Rakefile
│ └── build.xml
└── simple_compile.rb
├── src
└── org
│ └── jruby
│ └── ant
│ ├── RakeImport.java
│ ├── Rake.java
│ └── RakeTaskBase.java
├── nbproject
├── genfiles.properties
├── project.xml
├── project.properties
└── build-impl.xml
├── Rakefile
└── README
/.gitignore:
--------------------------------------------------------------------------------
1 | samples/java_build
2 | samples/*.jar
3 | build
4 | dist
5 | nbproject/private
6 | *~
7 |
--------------------------------------------------------------------------------
/lib/ant/rake.rb:
--------------------------------------------------------------------------------
1 | def ant_task(*args, &block)
2 | task = task(*args, &block)
3 | ant.add_target task
4 | ant.execute_target task.name
5 | end
--------------------------------------------------------------------------------
/samples/java_src/A.java:
--------------------------------------------------------------------------------
1 | public class A {
2 | public static void main(String[] args) {
3 | System.out.println("Hello World");
4 | }
5 | }
6 |
--------------------------------------------------------------------------------
/samples/rake_import_example/Rakefile:
--------------------------------------------------------------------------------
1 | directory './make_me'
2 |
3 | task :should_not_run do
4 | puts "We should not see this"
5 | end
6 |
7 | task :its_in_rake => [:setup, :its_in_ant] do
8 | puts "it's in Rake"
9 | end
10 |
11 | task :setup => './make_me' do
12 | puts "setup in Rake"
13 | end
14 |
15 |
--------------------------------------------------------------------------------
/src/org/jruby/ant/RakeImport.java:
--------------------------------------------------------------------------------
1 | package org.jruby.ant;
2 |
3 | import org.apache.tools.ant.BuildException;
4 |
5 | public class RakeImport extends RakeTaskBase {
6 | @Override
7 | public void execute() throws BuildException {
8 | super.execute();
9 |
10 | rakeMethod("import", handleFilenameArgument());
11 | }
12 | }
13 |
--------------------------------------------------------------------------------
/nbproject/genfiles.properties:
--------------------------------------------------------------------------------
1 | build.xml.data.CRC32=48b759f9
2 | build.xml.script.CRC32=a4ea63e4
3 | build.xml.stylesheet.CRC32=958a1d3e@1.32.1.45
4 | # This file is used by a NetBeans-based IDE to track changes in generated files such as build-impl.xml.
5 | # Do not edit this file. You may delete it but then the IDE will never regenerate such files for you.
6 | nbproject/build-impl.xml.data.CRC32=48b759f9
7 | nbproject/build-impl.xml.script.CRC32=9caf7ec3
8 | nbproject/build-impl.xml.stylesheet.CRC32=576378a2@1.32.1.45
9 |
--------------------------------------------------------------------------------
/samples/rake_import_example/build.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Builds, tests, and runs the project akakamiari.
5 |
6 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/nbproject/project.xml:
--------------------------------------------------------------------------------
1 |
2 |
3 | org.netbeans.modules.java.j2seproject
4 |
5 |
6 | akakamiari
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
--------------------------------------------------------------------------------
/lib/ant/tasks/raketasks.rb:
--------------------------------------------------------------------------------
1 | require 'rubygems'
2 | require 'rake'
3 | require 'ant'
4 |
5 | class RakeWrapper
6 | def load_tasks(*args)
7 | # FIXME: Use our arguments (this sucks...let's submit a patch for Rake
8 | ARGV.clear
9 | ARGV.concat args
10 |
11 | Rake.application.tap do |application|
12 | application.init
13 | application.load_rakefile
14 | end
15 | end
16 |
17 | def execute(*args)
18 | load_tasks(*args).top_level
19 | end
20 |
21 | def invoke_task(task)
22 | Rake.application[task].invoke
23 | end
24 |
25 | def import(*args)
26 | ant = Ant.new
27 | load_tasks(*args).tasks.each { |rake_task| ant.add_target rake_task }
28 | end
29 | end
30 |
--------------------------------------------------------------------------------
/lib/ant.rb:
--------------------------------------------------------------------------------
1 | require 'java'
2 |
3 | class Ant
4 | def self.get_from_ant
5 | IO.popen("ant -diagnostics") do |diag|
6 | home = diag.readlines.grep(/ant.home/).first.sub('ant.home: ', '').chomp
7 | return home if home
8 | end
9 | nil
10 | end
11 |
12 | def self.locate_ant_home
13 | return ENV['ANT_HOME'] if ENV['ANT_HOME'] && File.exist?(ENV['ANT_HOME'])
14 | get_from_ant
15 | end
16 |
17 | ANT_HOME = locate_ant_home
18 | end
19 |
20 | # ant-launcher.jar is required because we use Project.init()
21 | $CLASSPATH << File.join(Ant::ANT_HOME, 'lib', 'ant.jar')
22 | $CLASSPATH << File.join(Ant::ANT_HOME, 'lib', 'ant-launcher.jar')
23 |
24 | require 'ant/ant'
25 | require 'ant/rake' if defined?(::Rake)
26 |
--------------------------------------------------------------------------------
/Rakefile:
--------------------------------------------------------------------------------
1 | LIB_DIR = File.join File.dirname(__FILE__), 'lib'
2 | $LOAD_PATH << LIB_DIR
3 |
4 | require 'rake/clean'
5 | require 'ant'
6 |
7 | JAVA_CLASSES_DIR = 'build/classes'
8 |
9 | CLEAN.include '**/*~', 'samples/java_build/*', 'build/*'
10 |
11 | task :default => :compile do
12 | puts "default_task executing"
13 | end
14 |
15 | task :compile => :setup do
16 | puts "compile_task executing"
17 | ant.javac :srcdir => 'src', :destdir => JAVA_CLASSES_DIR do
18 | classpath do
19 | pathelement :location => File.join(Ant::ANT_HOME, 'lib', 'ant.jar')
20 | pathelement :location => File.join(LIB_DIR, 'jruby-complete.jar')
21 | end
22 | end
23 | end
24 |
25 | task :setup do
26 | puts "setup_task_executing"
27 | mkdir_p JAVA_CLASSES_DIR
28 | end
29 |
--------------------------------------------------------------------------------
/src/org/jruby/ant/Rake.java:
--------------------------------------------------------------------------------
1 | package org.jruby.ant;
2 |
3 | import java.util.List;
4 | import org.apache.tools.ant.BuildException;
5 |
6 | public class Rake extends RakeTaskBase {
7 | private String taskname; // A list?
8 |
9 | @Override
10 | public void execute() throws BuildException {
11 | super.execute();
12 | List args = handleFilenameArgument();
13 |
14 | if (taskname != null) args.add(taskname);
15 |
16 | rakeMethod("execute", args.toArray(new Object[args.size()]));
17 | }
18 |
19 | // FIXME?: Allow list of tasks to be executed
20 | public void setTask(String taskname) {
21 | this.taskname = taskname;
22 | }
23 | // FIXME: Add flag to allow registering all defined ant tasks in Rake dependency tree?
24 | }
25 |
--------------------------------------------------------------------------------
/lib/ant/target.rb:
--------------------------------------------------------------------------------
1 | require 'java'
2 | require 'ant/ant'
3 |
4 | java_import org.apache.tools.ant.Target
5 |
6 | class Ant
7 | class RakeTarget < Target
8 | ALREADY_DEFINED_PREFIX = "rake_"
9 |
10 | def initialize(ant, rake_task)
11 | super()
12 | set_project ant.project
13 | set_name generate_unique_target_name rake_task.name
14 |
15 | rake_task.prerequisites.each { |prereq| add_dependency prereq }
16 |
17 | @rake_task = rake_task
18 | end
19 |
20 | def execute
21 | @rake_task.execute
22 | end
23 |
24 | private
25 | def generate_unique_target_name(name)
26 | # FIXME: This is not guaranteed to be unique and may be a wonky naming convention?
27 | if project.targets.include?(name)
28 | project.log "ant already defines #{name}. Redefining as #{ALREADY_DEFINED_PREFIX}#{name}"
29 | name = ALREADY_DEFINED_PREFIX + name
30 | end
31 | name
32 | end
33 | end
34 | end
--------------------------------------------------------------------------------
/samples/simple_compile.rb:
--------------------------------------------------------------------------------
1 | require 'ant'
2 |
3 | # The lower you set this the less ant internal debugging output you will see..
4 | output_level = 5
5 |
6 | ant(:output_level => output_level) do
7 | # Regular Ruby variable interact fine
8 | build_dir = "java_build"
9 |
10 | # But defining and consuming ant properties is fine
11 | property :name => "src.dir", :value => "java_src"
12 |
13 | # This will end up not being used by ant because there is no 'classes'
14 | # directory. It is useful to see that ant figures this out when the
15 | # debug output_level is higher. You should see a message like:
16 | # 'dropping .../akakamiari/samples/classes from path as it doesn't exist'
17 | path(:id => "project.class.path") do
18 | pathelement :location => "classes"
19 | end
20 |
21 | echo :message => "SOURCE DIR IS: ${src.dir}"
22 | echo :message => "BUILD DIR IS: ${build.dir}"
23 |
24 | mkdir :dir => build_dir
25 |
26 | javac(:destdir => build_dir) do
27 | classpath :refid => "project.class.path"
28 | src do
29 | pathelement :location => "${src.dir}"
30 | end
31 | end
32 |
33 | jar :destfile => "simple_compile.jar", :basedir => build_dir
34 | end
35 |
--------------------------------------------------------------------------------
/src/org/jruby/ant/RakeTaskBase.java:
--------------------------------------------------------------------------------
1 | package org.jruby.ant;
2 |
3 | import java.util.ArrayList;
4 | import java.util.Arrays;
5 | import java.util.List;
6 | import org.apache.tools.ant.BuildException;
7 | import org.apache.tools.ant.Task;
8 | import org.jruby.embed.ScriptingContainer;
9 |
10 | public class RakeTaskBase extends Task {
11 | private Object rakeWrapper;
12 | private ScriptingContainer container;
13 |
14 | protected String filename;
15 |
16 | public RakeTaskBase() {
17 | acquireRakeReference();
18 | }
19 |
20 | public void setFile(String filename) {
21 | this.filename = filename;
22 | }
23 |
24 | @Override
25 | public void execute() throws BuildException {
26 | container.put("$project", getProject()); // set project so jruby ant lib gets it
27 | }
28 |
29 | protected void acquireRakeReference() {
30 | System.setProperty("jruby.native.enabled", "false"); // Problem with cl w/ jnr + jffi
31 | container = new ScriptingContainer();
32 |
33 | // FIXME: This needs to be replaced by something which does not assume CWD
34 | container.setLoadPaths(Arrays.asList("lib"));
35 | container.runScriptlet("require 'ant/tasks/raketasks'");
36 |
37 | rakeWrapper = container.runScriptlet("RakeWrapper.new");
38 | }
39 |
40 | protected List handleFilenameArgument() {
41 | List args = new ArrayList();
42 |
43 | if (filename != null) {
44 | args.add("-f");
45 | args.add(filename);
46 | }
47 |
48 | return args;
49 | }
50 |
51 | public void rakeMethod(String method, Object... args) throws BuildException {
52 | try {
53 | container.callMethod(rakeWrapper, method, args);
54 | } catch(Exception e) {
55 | throw new BuildException("Build failed: " + e.getMessage(), e);
56 | }
57 | }
58 | }
59 |
--------------------------------------------------------------------------------
/README:
--------------------------------------------------------------------------------
1 | Purpose of this project:
2 | Seamless integration between Rake and Ant environments.
3 |
4 | Quick Start:
5 | To run examples cd into samples and do a command-line like:
6 |
7 | jruby -I../lib simple_compile.rb
8 |
9 | Also the top-level Rakefile also uses these features to build the
10 | ant tasks so just running 'jruby -S rake' will use the ant features.
11 |
12 | Lastly, if you want to play with the task, you can run ant
13 | itself in the project directory:
14 |
15 | CLASSPATH=lib/jruby-complete.jar ant call-rakefile-setup
16 | CLASSPATH=lib/jruby-complete.jar ant call-rakefile
17 |
18 | The first example calls a low-level task in the Rakefile called setup.
19 | The second example calls default which will end up calling compile. This
20 | example is a little more trippy than the others since it is actually using
21 | ant tasks to run javac.
22 |
23 | As should be apparent in the previous examples, you need a copy of jruby-
24 | complete.jar to run these targets. Put it into the project lib dir.
25 |
26 | More info:
27 | 1. Allow Rakefiles to call ant tasks
28 | ant.java(:classname => "org.hsqldb.util.DatabaseManager", :fork => "yes") do
29 | classpath :refid => "project.class.path"
30 | arg :value => "-driver"
31 | arg :value => "org.hsqldb.jdbcDriver"
32 | arg :value => "-url"
33 | arg :value => "jdbc:hsqldb:#{data_dir}/music"
34 | arg :value => "-user"
35 | arg :value => "sa"
36 | end
37 |
38 | 2. Allow Rakefiles to be executed from ant. The first task is merely
39 | a callout task:
40 |
41 |
42 |
43 |
44 |
45 | This just runs a rakefile and executes a Rake task. If you omit the optional
46 | parameters then it will use the file 'Rakefile' and the task 'default'.
47 |
48 | The second task allows you to import all your rake tasks as ant targets.
49 | This allows you to mix and match between ant targets and rake tasks using
50 | ants target dependency management:
51 |
52 |
53 |
54 | If your ant build.xml has compile and it depends on setup and setup is
55 | defined in your Rakefile then compile will call setup as a dependency.
56 |
57 | 3. The same as number 2, but the other direction:
58 | ant_import 'build.xml'
59 | ant 'build'xml'
60 |
61 |
--------------------------------------------------------------------------------
/lib/ant/element.rb:
--------------------------------------------------------------------------------
1 | require 'java'
2 |
3 | java_import org.apache.tools.ant.IntrospectionHelper
4 | java_import org.apache.tools.ant.RuntimeConfigurable
5 | java_import org.apache.tools.ant.UnknownElement
6 |
7 | # This is really the metadata of the element coupled with the logic for
8 | # instantiating an instance of an element and evaluating it. My intention
9 | # is to decouple these two pieces. This has extra value since we can then
10 | # also make two types of instances for both top-level tasks and for targets
11 | # since we have some conditionals which would then be eliminated
12 | class Element
13 | attr_reader :name
14 |
15 | def initialize(ant, name, clazz)
16 | @ant, @name, @clazz = ant, name, clazz
17 | end
18 |
19 | def call(parent, args={}, &code)
20 | element = create parent
21 | assign_attributes element, args
22 | define_nested_elements element
23 | code.arity==1 ? code[element] : element.instance_eval(&code) if block_given?
24 | if parent.respond_to? :get_owning_target # Task
25 | @ant.project.log "Adding #{name} to #{parent.component_name}", 5
26 | parent.add_child element
27 | parent.runtime_configurable_wrapper.add_child element.runtime_configurable_wrapper
28 | else # Target
29 | @ant.project.log "Executing #{name}", 5
30 | element.maybe_configure
31 | element.execute
32 | end
33 | end
34 |
35 | private
36 | def create(parent) # See ProjectHelper2.ElementHelper
37 | UnknownElement.new(@name).tap do |e|
38 | e.project = @ant.project
39 | e.task_name = @name
40 | end
41 | end
42 |
43 | # This also subsumes configureId to only have to traverse args once
44 | def assign_attributes(instance, args)
45 | @ant.project.log "instance.task_name #{instance.task_name} #{name}", 5
46 | wrapper = RuntimeConfigurable.new instance, instance.task_name
47 | args.each do |key, value|
48 | # FIXME: Infinite recursion and only single expression expansion
49 | while value =~ /\$\{([^\}]+)\}/
50 | value.gsub!(/\$\{[^\}]+\}/, @ant.project.get_property($1).to_s)
51 | end
52 | wrapper.set_attribute key, value
53 | end
54 | end
55 |
56 | def define_nested_elements(instance)
57 | meta_class = class << instance; self; end
58 | @helper = IntrospectionHelper.get_helper(@ant.project, @clazz)
59 | @helper.get_nested_element_map.each do |element_name, clazz|
60 | element = @ant.acquire_element(element_name, clazz)
61 | meta_class.send(:define_method, element_name) do |*args, &block|
62 | element.call(instance, *args, &block)
63 | end
64 | end
65 | end
66 | end
67 |
--------------------------------------------------------------------------------
/nbproject/project.properties:
--------------------------------------------------------------------------------
1 | application.title=akakamiari
2 | application.vendor=enebo
3 | build.classes.dir=${build.dir}/classes
4 | build.classes.excludes=**/*.java,**/*.form
5 | # This directory is removed when the project is cleaned:
6 | build.dir=build
7 | build.generated.dir=${build.dir}/generated
8 | build.generated.sources.dir=${build.dir}/generated-sources
9 | # Only compile against the classpath explicitly listed here:
10 | build.sysclasspath=ignore
11 | build.test.classes.dir=${build.dir}/test/classes
12 | build.test.results.dir=${build.dir}/test/results
13 | # Uncomment to specify the preferred debugger connection transport:
14 | #debug.transport=dt_socket
15 | debug.classpath=\
16 | ${run.classpath}
17 | debug.test.classpath=\
18 | ${run.test.classpath}
19 | # This directory is removed when the project is cleaned:
20 | dist.dir=dist
21 | dist.jar=${dist.dir}/akakamiari.jar
22 | dist.javadoc.dir=${dist.dir}/javadoc
23 | endorsed.classpath=
24 | excludes=java_build/**, java_src/**, simple_compile.jar
25 | file.reference.akakamiari-lib=lib
26 | file.reference.akakamiari-samples=samples
27 | file.reference.akakamiari-src=src
28 | file.reference.ant.jar=../apache-ant-1.7.1/build/lib/ant.jar
29 | file.reference.jruby-complete.jar=lib/jruby-complete.jar
30 | includes=**
31 | jar.compress=false
32 | javac.classpath=\
33 | ${file.reference.jruby-complete.jar}:\
34 | ${file.reference.ant.jar}
35 | # Space-separated list of extra javac options
36 | javac.compilerargs=
37 | javac.deprecation=false
38 | javac.source=1.5
39 | javac.target=1.5
40 | javac.test.classpath=\
41 | ${javac.classpath}:\
42 | ${build.classes.dir}:\
43 | ${libs.junit.classpath}:\
44 | ${libs.junit_4.classpath}
45 | javadoc.additionalparam=
46 | javadoc.author=false
47 | javadoc.encoding=${source.encoding}
48 | javadoc.noindex=false
49 | javadoc.nonavbar=false
50 | javadoc.notree=false
51 | javadoc.private=false
52 | javadoc.splitindex=true
53 | javadoc.use=true
54 | javadoc.version=false
55 | javadoc.windowtitle=
56 | jaxbwiz.endorsed.dirs="${netbeans.home}/../ide12/modules/ext/jaxb/api"
57 | lib.dir=${file.reference.akakamiari-lib}
58 | main.class=
59 | manifest.file=manifest.mf
60 | meta.inf.dir=${src.dir}/META-INF
61 | platform.active=default_platform
62 | run.classpath=\
63 | ${javac.classpath}:\
64 | ${build.classes.dir}
65 | # Space-separated list of JVM arguments used when running the project
66 | # (you may also define separate properties like run-sys-prop.name=value instead of -Dname=value
67 | # or test-sys-prop.name=value to set system properties for unit tests):
68 | run.jvmargs=
69 | run.test.classpath=\
70 | ${javac.test.classpath}:\
71 | ${build.test.classes.dir}
72 | samples.dir=${file.reference.akakamiari-samples}
73 | source.encoding=UTF-8
74 | src.dir=${file.reference.akakamiari-src}
75 |
--------------------------------------------------------------------------------
/lib/ant/ant.rb:
--------------------------------------------------------------------------------
1 | require 'java'
2 | require 'ant/element'
3 | require 'ant/target'
4 |
5 | java_import org.apache.tools.ant.ComponentHelper
6 | java_import org.apache.tools.ant.DefaultLogger
7 | java_import org.apache.tools.ant.Project
8 | java_import org.apache.tools.ant.Target
9 |
10 | class Ant
11 | attr_reader :project
12 |
13 | def initialize(options={}, &block)
14 | @options = options
15 | @project = create_project options
16 | initialize_elements
17 | end
18 |
19 | def create_project(options)
20 | # If we are calling into a rakefile from ant then we already have a project to use
21 | return $project if $project
22 |
23 | Project.new.tap do |p|
24 | p.init
25 | p.add_build_listener(DefaultLogger.new.tap do |log|
26 | log.output_print_stream = java.lang.System.out
27 | log.error_print_stream = java.lang.System.err
28 | log.emacs_mode = true
29 | log.message_output_level = options[:output_level] || 2
30 | end)
31 | end
32 | end
33 |
34 | # Add a target (two forms)
35 | # 1. Execute a block as a target: add_target "foo-target" { echo :message => "I am cool" }
36 | # 2. Execute a rake task as a target: add_target Rake.application["default"]
37 | def add_target(task, &block)
38 | target = block_given? ? BlockTarget.new(self, task, &block) : RakeTarget.new(self, task)
39 | @project.add_target target
40 | end
41 |
42 | def execute_target(name)
43 | @project.execute_target(name)
44 | end
45 |
46 | # We generate top-level methods for all default data types and task definitions for this instance
47 | # of ant. This eliminates the need to rely on method_missing.
48 | def initialize_elements
49 | @elements = {}
50 | @helper = ComponentHelper.get_component_helper @project
51 | generate_children @project.data_type_definitions
52 | generate_children @project.task_definitions
53 | end
54 |
55 | # All elements (including nested elements) are registered so we can access them easily.
56 | def acquire_element(name, clazz)
57 | element = @elements[name]
58 | return element if element
59 |
60 | # Not registered in ant's type registry for this project (nested el?)
61 | unless @helper.get_definition(name)
62 | @project.log "Adding #{name} -> #{clazz.inspect}", 5
63 | @helper.add_data_type_definition(name, clazz)
64 | end
65 |
66 | @elements[name] = :give_it_something_to_prevent_endless_recursive_defs
67 | @elements[name] = Element.new(self, name, clazz)
68 | end
69 |
70 | def generate_children(collection)
71 | collection.each do |name, clazz|
72 | element = acquire_element(name, clazz)
73 | self.class.send(:define_method, name) do |*a, &b|
74 | element.call(@current_target, *a, &b)
75 | end
76 | end
77 | end
78 |
79 | class << self
80 | def ant(options={}, &code)
81 | @ant ||= Ant.new options
82 | code.arity==1 ? code[@ant] : @ant.instance_eval(&code) if block_given?
83 | @ant
84 | end
85 | end
86 | end
87 |
88 | def ant(*args, &block)
89 | Ant.ant(*args, &block)
90 | end
91 |
92 | def ant_import(filename = 'build.xml')
93 | # FIXME: Implement this
94 | end
95 |
--------------------------------------------------------------------------------
/nbproject/build-impl.xml:
--------------------------------------------------------------------------------
1 |
2 |
22 |
23 |
24 |
25 |
26 |
27 |
28 |
29 |
30 |
31 |
36 |
37 |
38 |
39 |
40 |
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
49 |
50 |
51 |
52 |
53 |
54 |
55 |
56 |
57 |
58 |
59 |
60 |
61 |
62 |
63 |
64 |
65 |
66 |
67 |
68 |
69 |
70 |
71 |
72 |
73 |
74 |
75 |
76 |
77 |
78 |
79 |
80 |
81 |
82 |
83 |
84 |
85 |
86 |
87 |
88 |
89 |
90 |
91 |
92 |
93 |
94 |
95 |
96 |
97 |
98 |
99 |
100 |
101 |
102 |
103 |
104 |
105 |
106 |
107 |
108 |
109 |
110 |
111 |
112 |
113 |
114 |
115 |
116 |
117 |
118 |
119 |
120 |
121 |
122 |
123 |
124 |
125 |
126 |
127 |
128 |
129 |
130 |
131 |
132 |
133 |
134 |
135 |
136 |
137 |
138 |
139 |
140 |
141 |
142 |
143 |
144 |
145 |
146 |
147 |
148 |
149 |
150 |
151 |
152 |
153 |
154 |
155 |
156 |
157 |
158 |
159 |
160 |
161 |
162 |
163 |
164 |
165 | Must set src.dir
166 | Must set lib.dir
167 | Must set samples.dir
168 | Must set build.dir
169 | Must set dist.dir
170 | Must set build.classes.dir
171 | Must set dist.javadoc.dir
172 | Must set build.test.classes.dir
173 | Must set build.test.results.dir
174 | Must set build.classes.excludes
175 | Must set dist.jar
176 |
177 |
178 |
179 |
180 |
181 |
182 |
183 |
184 |
185 |
186 |
187 |
188 |
189 |
190 |
191 |
192 |
193 |
194 |
195 |
196 |
197 |
198 |
199 |
200 |
201 |
202 |
203 |
204 |
205 |
206 |
207 |
208 |
209 |
210 |
211 |
212 |
213 |
214 |
215 |
216 |
217 |
218 |
219 |
220 |
221 |
222 |
223 |
224 |
225 |
226 |
227 |
228 |
229 |
230 | Must set javac.includes
231 |
232 |
233 |
234 |
235 |
236 |
237 |
238 |
239 |
240 |
241 |
242 |
243 |
244 |
245 |
246 |
247 |
248 |
249 |
250 |
251 |
252 |
253 |
254 |
255 |
256 |
257 |
258 |
259 |
260 |
261 |
262 |
263 |
264 |
265 |
266 |
267 |
268 |
269 |
270 |
271 |
272 |
273 |
274 |
275 |
276 |
277 |
278 |
279 |
280 |
281 |
282 |
283 |
284 |
285 |
286 |
287 |
288 |
289 |
290 |
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 |
303 |
304 |
305 |
306 |
307 |
308 |
309 |
310 |
311 |
312 |
313 |
314 |
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |
337 |
338 |
339 |
340 |
341 |
342 |
343 |
344 |
345 |
346 |
347 |
348 |
349 |
350 |
351 |
352 |
353 |
354 |
355 |
356 |
357 |
358 |
359 |
360 |
361 |
362 |
363 |
364 |
365 |
366 |
371 |
372 |
373 |
374 |
375 |
376 |
377 |
378 |
379 |
380 |
381 |
382 |
383 |
384 |
385 |
386 |
387 |
388 |
389 |
390 |
391 |
392 |
393 |
394 |
395 |
396 |
397 |
398 |
399 |
400 |
401 |
402 |
403 |
404 |
405 |
406 |
407 |
408 |
409 |
410 |
411 |
412 |
413 |
414 |
415 |
416 |
417 |
418 |
419 |
420 |
421 |
422 |
423 |
424 |
425 |
426 |
427 | Must select some files in the IDE or set javac.includes
428 |
429 |
430 |
431 |
432 |
433 |
434 |
435 |
436 |
441 |
442 |
443 |
444 |
445 |
446 |
447 |
448 |
449 |
450 |
451 |
452 |
453 |
454 |
455 |
456 |
457 |
458 |
459 |
460 |
461 | To run this application from the command line without Ant, try:
462 |
463 |
464 |
465 |
466 |
467 |
468 | java -cp "${run.classpath.with.dist.jar}" ${main.class}
469 |
470 |
471 |
472 |
473 |
474 |
475 |
476 |
477 |
478 |
479 |
480 |
481 |
482 |
483 |
484 |
485 |
486 |
487 |
488 |
489 |
490 |
491 | To run this application from the command line without Ant, try:
492 |
493 | java -jar "${dist.jar.resolved}"
494 |
495 |
496 |
497 |
498 |
499 |
500 |
501 |
502 |
503 |
504 |
505 |
506 |
507 |
508 |
509 |
510 |
511 |
512 |
513 |
514 |
515 |
516 |
517 |
518 |
519 |
520 |
521 |
522 |
523 |
524 |
525 |
526 |
527 |
528 |
529 |
530 |
531 |
532 |
533 |
534 |
535 |
536 |
537 |
538 |
539 |
540 |
541 |
542 |
547 |
548 |
549 |
550 |
551 |
552 |
553 |
554 |
555 |
556 |
557 |
558 | Must select one file in the IDE or set run.class
559 |
560 |
561 |
562 | Must select one file in the IDE or set run.class
563 |
564 |
565 |
570 |
571 |
572 |
573 |
574 |
575 |
576 |
577 |
578 |
579 |
580 |
581 |
582 |
583 |
584 |
585 |
586 |
587 |
588 |
589 | Must select one file in the IDE or set debug.class
590 |
591 |
592 |
593 |
594 | Must select one file in the IDE or set debug.class
595 |
596 |
597 |
598 |
599 | Must set fix.includes
600 |
601 |
602 |
603 |
604 |
605 |
606 |
611 |
612 |
613 |
614 |
615 |
616 |
617 |
618 |
619 |
620 |
621 |
622 |
623 |
624 |
625 |
626 |
627 |
628 |
629 |
630 |
631 |
632 |
633 |
634 |
635 |
640 |
641 |
642 |
643 |
644 |
645 |
646 |
647 |
648 |
649 |
650 |
651 |
652 |
653 |
654 |
655 |
656 |
657 |
658 |
659 |
660 |
661 |
662 |
663 |
664 | Must select some files in the IDE or set javac.includes
665 |
666 |
667 |
668 |
669 |
670 |
671 |
672 |
673 |
674 |
679 |
680 |
681 |
682 |
683 |
684 |
685 |
686 | Some tests failed; see details above.
687 |
688 |
689 |
690 |
691 |
692 |
693 |
694 |
695 | Must select some files in the IDE or set test.includes
696 |
697 |
698 |
699 | Some tests failed; see details above.
700 |
701 |
702 |
707 |
708 | Must select one file in the IDE or set test.class
709 |
710 |
711 |
712 |
713 |
714 |
715 |
716 |
717 |
718 |
719 |
720 |
721 |
722 |
723 |
724 |
725 |
726 |
727 |
728 |
729 |
730 |
731 |
732 |
733 |
738 |
739 | Must select one file in the IDE or set applet.url
740 |
741 |
742 |
743 |
744 |
745 |
746 |
751 |
752 | Must select one file in the IDE or set applet.url
753 |
754 |
755 |
756 |
757 |
758 |
759 |
760 |
765 |
766 |
767 |
768 |
769 |
770 |
771 |
772 |
773 |
774 |
775 |
776 |
777 |
778 |
779 |
780 |
781 |
782 |
783 |
784 |
785 |
786 |
787 |
788 |
789 |
790 |
791 |
792 |
793 |
794 |
795 |
796 |
797 |
798 |
799 |
800 |
801 |
802 |
803 |
804 |
805 |
806 |
807 |
--------------------------------------------------------------------------------