rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/Java2JavaScript.java
changeset 847 094e10a97511
parent 772 d382dacfd73f
child 861 f41a1fef7738
     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      }