rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/AheadOfTime.java
branchclosure
changeset 1604 7665471a56c1
parent 1599 36746c46716a
child 1618 f62b42f0b751
     1.1 --- a/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/AheadOfTime.java	Mon May 26 17:52:56 2014 +0200
     1.2 +++ b/rt/mojo/src/main/java/org/apidesign/bck2brwsr/mojo/AheadOfTime.java	Tue May 27 12:25:41 2014 +0200
     1.3 @@ -18,25 +18,16 @@
     1.4  
     1.5  package org.apidesign.bck2brwsr.mojo;
     1.6  
     1.7 -import java.io.BufferedReader;
     1.8  import java.io.File;
     1.9  import java.io.FileWriter;
    1.10  import java.io.IOException;
    1.11  import java.io.InputStream;
    1.12 -import java.io.InputStreamReader;
    1.13  import java.net.MalformedURLException;
    1.14  import java.net.URL;
    1.15  import java.net.URLClassLoader;
    1.16  import java.util.ArrayList;
    1.17  import java.util.Collection;
    1.18 -import java.util.Enumeration;
    1.19 -import java.util.HashSet;
    1.20  import java.util.List;
    1.21 -import java.util.Set;
    1.22 -import java.util.jar.JarEntry;
    1.23 -import java.util.jar.JarFile;
    1.24 -import java.util.logging.Level;
    1.25 -import java.util.logging.Logger;
    1.26  import org.apache.maven.artifact.Artifact;
    1.27  import org.apache.maven.plugin.AbstractMojo;
    1.28  import org.apache.maven.plugin.MojoExecutionException;
    1.29 @@ -62,13 +53,22 @@
    1.30  public class AheadOfTime extends AbstractMojo {
    1.31      @Parameter(defaultValue = "${project}")
    1.32      private MavenProject prj;
    1.33 +    
    1.34 +    @Parameter(defaultValue = "${project.build.directory}/${project.build.finalName}.jar")
    1.35 +    private File mainJar;
    1.36  
    1.37 +    @Parameter(defaultValue = "${project.build.directory}/${project.build.finalName}.js")
    1.38 +    private File mainJavaScript;
    1.39 +    
    1.40 +    @Parameter
    1.41 +    private String[] exports;
    1.42 +    
    1.43      /**
    1.44       * Directory where to generate ahead-of-time JavaScript files for
    1.45       * required libraries.
    1.46       */
    1.47 -    @Parameter(defaultValue = "${project.build.directory}/lib")
    1.48 -    private File aot;
    1.49 +    @Parameter(defaultValue = "lib")
    1.50 +    private String classPathPrefix;
    1.51  
    1.52      /** Root JavaScript file to generate */
    1.53      @Parameter(defaultValue="${project.build.directory}/bck2brwsr.js")
    1.54 @@ -86,7 +86,7 @@
    1.55      public void execute() throws MojoExecutionException, MojoFailureException {
    1.56          URLClassLoader loader;
    1.57          try {
    1.58 -            loader = buildClassLoader(null, prj.getArtifacts());
    1.59 +            loader = buildClassLoader(mainJar, prj.getArtifacts());
    1.60          } catch (MalformedURLException ex) {
    1.61              throw new MojoFailureException("Can't initialize classloader");
    1.62          }
    1.63 @@ -101,6 +101,7 @@
    1.64              if ("provided".equals(a.getScope())) {
    1.65                  continue;
    1.66              }
    1.67 +            File aot = new File(prj.getBuild().getDirectory(), classPathPrefix);
    1.68              aot.mkdirs();
    1.69              File js = new File(aot, n.substring(0, n.length() - 4) + ".js");
    1.70              try {
    1.71 @@ -109,6 +110,23 @@
    1.72                  throw new MojoFailureException("Can't compile" + a.getFile(), ex);
    1.73              }
    1.74          }
    1.75 +        
    1.76 +        try {
    1.77 +            Bck2Brwsr c = Bck2BrwsrJars.configureFrom(null, mainJar);
    1.78 +            if (exports != null) {
    1.79 +                for (String e : exports) {
    1.80 +                    c = c.addExported(e.replace('.', '/'));
    1.81 +                }
    1.82 +            }
    1.83 +            FileWriter w = new FileWriter(mainJavaScript);
    1.84 +            c.
    1.85 +                    obfuscation(obfuscation).
    1.86 +                    resources(loader).
    1.87 +                    generate(w);
    1.88 +            w.close();
    1.89 +        } catch (IOException ex) {
    1.90 +            throw new MojoFailureException("Cannot generate script for " + mainJar, ex);
    1.91 +        }
    1.92              
    1.93          try {
    1.94              FileWriter w = new FileWriter(vm);