package org.codehaus.mojo.gwt.shell; /* * Licensed to the Apache Software Foundation (ASF) under one * or more contributor license agreements. See the NOTICE file * distributed with this work for additional information * regarding copyright ownership. The ASF licenses this file * to you under the Apache License, Version 2.0 (the * "License"); you may not use this file except in compliance * with the License. You may obtain a copy of the License at * * http://www.apache.org/licenses/LICENSE-2.0 * * Unless required by applicable law or agreed to in writing, * software distributed under the License is distributed on an * "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY * KIND, either express or implied. See the License for the * specific language governing permissions and limitations * under the License. */ import org.apache.maven.artifact.Artifact; import org.apache.maven.plugin.MojoExecutionException; import org.apache.maven.plugin.MojoFailureException; import org.apache.maven.plugins.annotations.Execute; import org.apache.maven.plugins.annotations.LifecyclePhase; import org.apache.maven.plugins.annotations.Mojo; import org.apache.maven.plugins.annotations.Parameter; import org.apache.maven.plugins.annotations.ResolutionScope; import org.apache.maven.project.MavenProject; import java.io.File; /** * Runs GWT modules with Super Dev Mode. * * @author t.broyer * @since 2.5.0-rc1 */ @Mojo(name = "run-codeserver", requiresDirectInvocation = true, requiresDependencyResolution = ResolutionScope.COMPILE) @Execute(phase = LifecyclePhase.PROCESS_CLASSES) public class SuperDevModeMojo extends AbstractGwtShellMojo { /** * Set SuperDevMode's bindAddress. * <p> * Can be set from command line using '-Dgwt.bindAddress=...' */ @Parameter(property = "gwt.bindAddress") private String bindAddress; /** * The port where the code server will run. */ @Parameter(property = "gwt.codeServerPort") private Integer codeServerPort; /** * The root of the directory tree where the code server will write compiler output. * If not supplied, a temporary directory will be used. */ @Parameter private File codeServerWorkDir; /** * Precompile modules. * * @since 2.6.0-rc1 */ @Parameter(defaultValue = "true", property = "gwt.codeServer.precompile") private boolean precompile; /** * Specifies Java source level. * * @since 2.6.0-rc1 */ @Parameter(defaultValue = "auto", property = "maven.compiler.source") private String sourceLevel; /** * Stop compiling if a module has a Java file with a compile error, even if unused. * <p> * Can be set from command line using '-Dgwt.compiler.strict=true'. * * @since 2.7.0-rc1 */ @Parameter(alias = "strict", defaultValue = "false", property = "gwt.compiler.strict") private boolean failOnError; /** * Compiles faster by reusing data from the previous compile. * * @since 2.7.0-rc1 */ @Parameter(alias = "compilePerFile", defaultValue = "true", property = "gwt.compiler.incremental") private boolean incremental; /** * Generate exports for JsInterop purposes. * * @since 2.8.0-rc1 */ @Parameter(alias = "generateJsInteropExports", defaultValue = "false", property = "gwt.compiler.generateJsInteropExports") private boolean generateJsInteropExports; /** * EXPERIMENTAL: Emit extra information allow chrome dev tools to display Java identifiers in many places instead of JavaScript functions. * <p> * Value can be one of NONE, ONLY_METHOD_NAME, ABBREVIATED or FULL. * * @since 2.7.0-rc1 */ @Parameter(defaultValue = "NONE", property = "gwt.compiler.methodNameDisplayMode") private String methodNameDisplayMode; /** * An output directory where files for launching Super Dev Mode will be written. (Optional.) * * @since 2.7.0 */ @Parameter(property = "gwt.codeServer.launcherDir") private File launcherDir; /** * The MavenProject executed by the "process-classes" phase. */ @Parameter(defaultValue = "${executedProject}") private MavenProject executedProject; @Override public void doExecute() throws MojoExecutionException, MojoFailureException { JavaCommand cmd = createJavaCommand() .setMainClass( "com.google.gwt.dev.codeserver.CodeServer" ); if ( gwtSdkFirstInClasspath ) { cmd.addToClasspath( getGwtUserJar() ) .addToClasspath( getGwtDevJar() ); } cmd.addToClasspath( getClasspath( Artifact.SCOPE_COMPILE ) ); addCompileSourceArtifacts( cmd ); addPersistentUnitCache(cmd); if ( !gwtSdkFirstInClasspath ) { cmd.addToClasspath( getGwtUserJar() ) .addToClasspath( getGwtDevJar() ); } cmd.arg( "-logLevel", getLogLevel() ); cmd.arg( !precompile, "-noprecompile" ); cmd.arg( "-sourceLevel", sourceLevel ); cmd.arg( failOnError, "-failOnError" ); cmd.arg( !incremental, "-noincremental" ); cmd.arg( generateJsInteropExports, "-generateJsInteropExports" ); if ( style != null && style.length() > 0 ) { cmd.arg( "-style", style ); } if ( methodNameDisplayMode != null && methodNameDisplayMode.length() > 0 && !methodNameDisplayMode.equals( "NONE" )) { cmd.arg( "-XmethodNameDisplayMode", methodNameDisplayMode ); } if ( bindAddress != null && bindAddress.length() > 0 ) { cmd.arg( "-bindAddress", bindAddress ); } if ( codeServerPort != null ) { cmd.arg( "-port", String.valueOf( codeServerPort ) ); } if ( codeServerWorkDir != null ) { codeServerWorkDir.mkdirs(); cmd.arg( "-workDir", codeServerWorkDir.getAbsolutePath() ); } if ( launcherDir != null ) { cmd.arg( "-launcherDir", launcherDir.getAbsolutePath() ); } for ( String module : getModules() ) { cmd.arg( module ); } try { cmd.execute(); } catch ( JavaCommandException e ) { throw new MojoExecutionException( e.getMessage(), e ); } } public void setExecutedProject( MavenProject executedProject ) { this.executedProject = executedProject; } @Override public MavenProject getProject() { return executedProject; } }