1.1 --- a/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/Java2JavaScript.java Tue Feb 26 16:54:16 2013 +0100
1.2 +++ b/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/Java2JavaScript.java Mon Mar 18 09:04:46 2013 +0100
1.3 @@ -44,11 +44,17 @@
1.4 /** Root of the class files */
1.5 @Parameter(defaultValue="${project.build.directory}/classes")
1.6 private File classes;
1.7 - /** File to generate. Defaults bootjava.js in the first non-empty
1.8 - package under the classes directory */
1.9 + /** JavaScript file to generate */
1.10 @Parameter
1.11 private File javascript;
1.12
1.13 + /** Additional classes that should be pre-compiled into the javascript
1.14 + * file. By default compiles all classes found under <code>classes</code>
1.15 + * directory and their transitive closure.
1.16 + */
1.17 + @Parameter
1.18 + private List<String> compileclasses;
1.19 +
1.20 @Parameter(defaultValue="${project}")
1.21 private MavenProject prj;
1.22
1.23 @@ -60,13 +66,14 @@
1.24 throw new MojoExecutionException("Can't find " + classes);
1.25 }
1.26
1.27 - if (javascript == null) {
1.28 - javascript = new File(findNonEmptyFolder(classes), "bootjava.js");
1.29 - }
1.30 -
1.31 List<String> arr = new ArrayList<String>();
1.32 long newest = collectAllClasses("", classes, arr);
1.33
1.34 + if (compileclasses != null) {
1.35 + arr.retainAll(compileclasses);
1.36 + arr.addAll(compileclasses);
1.37 + }
1.38 +
1.39 if (javascript.lastModified() > newest) {
1.40 return;
1.41 }
1.42 @@ -81,17 +88,6 @@
1.43 }
1.44 }
1.45
1.46 - private static File findNonEmptyFolder(File dir) throws MojoExecutionException {
1.47 - if (!dir.isDirectory()) {
1.48 - throw new MojoExecutionException("Not a directory " + dir);
1.49 - }
1.50 - File[] arr = dir.listFiles();
1.51 - if (arr.length == 1 && arr[0].isDirectory()) {
1.52 - return findNonEmptyFolder(arr[0]);
1.53 - }
1.54 - return dir;
1.55 - }
1.56 -
1.57 private static long collectAllClasses(String prefix, File toCheck, List<String> arr) {
1.58 File[] files = toCheck.listFiles();
1.59 if (files != null) {
1.60 @@ -104,7 +100,8 @@
1.61 }
1.62 return newest;
1.63 } else if (toCheck.getName().endsWith(".class")) {
1.64 - arr.add(prefix.substring(0, prefix.length() - 7));
1.65 + final String cls = prefix.substring(0, prefix.length() - 7);
1.66 + arr.add(cls);
1.67 return toCheck.lastModified();
1.68 } else {
1.69 return 0L;
1.70 @@ -115,7 +112,9 @@
1.71 List<URL> arr = new ArrayList<URL>();
1.72 arr.add(root.toURI().toURL());
1.73 for (Artifact a : deps) {
1.74 - arr.add(a.getFile().toURI().toURL());
1.75 + if (a.getFile() != null) {
1.76 + arr.add(a.getFile().toURI().toURL());
1.77 + }
1.78 }
1.79 return new URLClassLoader(arr.toArray(new URL[0]), Java2JavaScript.class.getClassLoader());
1.80 }