Browse Source

AMBARI-14231. Upgrading Ambari Jetty Server from Jetty 8 to Jetty 9. (Nisarg, Ashwin, Ravi and Varun via Jaimin)

Jaimin Jetly 9 years ago
parent
commit
9d39ab2e4c

+ 2 - 6
ambari-funtest/pom.xml

@@ -311,12 +311,8 @@
     </dependency>
     <!--jsp support for jetty -->
     <dependency>
-      <groupId>org.mortbay.jetty</groupId>
-      <artifactId>jsp-api-2.1-glassfish</artifactId>
-    </dependency>
-    <dependency>
-      <groupId>org.mortbay.jetty</groupId>
-      <artifactId>jsp-2.1-glassfish</artifactId>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-jsp</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.ant</groupId>

+ 9 - 15
ambari-project/pom.xml

@@ -260,38 +260,32 @@
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-server</artifactId>
-        <version>8.1.17.v20150415</version>
+        <version>9.2.11.v20150529</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-security</artifactId>
-        <version>8.1.17.v20150415</version>
+        <version>9.2.11.v20150529</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-servlet</artifactId>
-        <version>8.1.17.v20150415</version>
+        <version>9.2.11.v20150529</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-servlets</artifactId>
-        <version>8.1.17.v20150415</version>
+        <version>9.2.11.v20150529</version>
       </dependency>
       <dependency>
         <groupId>org.eclipse.jetty</groupId>
         <artifactId>jetty-webapp</artifactId>
-        <version>8.1.17.v20150415</version>
+        <version>9.2.11.v20150529</version>
       </dependency>
-      <!--jsp support for jetty -->
       <dependency>
-        <groupId>org.mortbay.jetty</groupId>
-        <artifactId>jsp-api-2.1-glassfish</artifactId>
-        <version>2.1.v20100127</version>
-      </dependency>
-      <dependency>
-        <groupId>org.mortbay.jetty</groupId>
-        <artifactId>jsp-2.1-glassfish</artifactId>
-        <version>2.1.v20100127</version>
+        <groupId>org.eclipse.jetty</groupId>
+        <artifactId>jetty-jsp</artifactId>
+        <version>9.2.11.v20150529</version>
       </dependency>
       <dependency>
         <groupId>org.apache.ant</groupId>
@@ -327,7 +321,7 @@
       <dependency>
         <groupId>javax.servlet</groupId>
         <artifactId>javax.servlet-api</artifactId>
-        <version>3.0.1</version>
+        <version>3.1.0</version>
       </dependency>
       <dependency>
         <groupId>com.sun.jersey</groupId>

+ 18 - 7
ambari-server/pom.xml

@@ -48,6 +48,7 @@
     <tarballResourcesFolder>src/main/resources</tarballResourcesFolder>
     <skipPythonTests>false</skipPythonTests>
     <hadoop.version>2.7.1</hadoop.version>
+    <jetty.version>9.2.11.v20150529</jetty.version>
   </properties>
   <build>
     <plugins>
@@ -1324,6 +1325,11 @@
           </execution>
         </executions>
       </plugin>
+      <plugin>
+        <groupId>org.eclipse.jetty</groupId>
+        <artifactId>jetty-maven-plugin</artifactId>
+        <version>${jetty.version}</version>
+      </plugin>
     </plugins>
     <resources>
       <resource>
@@ -1765,14 +1771,9 @@
       <groupId>org.eclipse.jetty</groupId>
       <artifactId>jetty-webapp</artifactId>
     </dependency>
-    <!--jsp support for jetty -->
-    <dependency>
-      <groupId>org.mortbay.jetty</groupId>
-      <artifactId>jsp-api-2.1-glassfish</artifactId>
-    </dependency>
     <dependency>
-      <groupId>org.mortbay.jetty</groupId>
-      <artifactId>jsp-2.1-glassfish</artifactId>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-jsp</artifactId>
     </dependency>
     <dependency>
       <groupId>org.apache.ant</groupId>
@@ -2027,6 +2028,16 @@
       <artifactId>hadoop-auth</artifactId>
       <version>${hadoop.version}</version>
     </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-util</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
+    <dependency>
+      <groupId>org.eclipse.jetty</groupId>
+      <artifactId>jetty-util-ajax</artifactId>
+      <version>${jetty.version}</version>
+    </dependency>
   </dependencies>
 
   <pluginRepositories>

+ 7 - 7
ambari-server/src/main/java/org/apache/ambari/server/api/AmbariErrorHandler.java

@@ -25,7 +25,8 @@ import org.apache.ambari.server.configuration.Configuration;
 import org.apache.ambari.server.security.authorization.jwt.JwtAuthenticationProperties;
 import org.eclipse.jetty.http.HttpStatus;
 import org.eclipse.jetty.http.MimeTypes;
-import org.eclipse.jetty.server.AbstractHttpConnection;
+import org.eclipse.jetty.server.HttpChannel;
+import org.eclipse.jetty.server.HttpConnection;
 import org.eclipse.jetty.server.Request;
 import org.eclipse.jetty.server.handler.ErrorHandler;
 
@@ -50,15 +51,14 @@ public class AmbariErrorHandler extends ErrorHandler {
 
   @Override
   public void handle(String target, Request baseRequest, HttpServletRequest request, HttpServletResponse response) throws IOException {
-    AbstractHttpConnection connection = AbstractHttpConnection.getCurrentConnection();
-    connection.getRequest().setHandled(true);
-
-    response.setContentType(MimeTypes.TEXT_PLAIN);
+    HttpChannel httpChannel = HttpConnection.getCurrentConnection().getHttpChannel();
+    httpChannel.getRequest().setHandled(true);
+    response.setContentType(MimeTypes.Type.TEXT_PLAIN.asString());
 
     Map<String, Object> errorMap = new LinkedHashMap<String, Object>();
-    int code = connection.getResponse().getStatus();
+    int code = httpChannel.getResponse().getStatus();
     errorMap.put("status", code);
-    String message = connection.getResponse().getReason();
+    String message = httpChannel.getResponse().getReason();
     if (message == null) {
       message = HttpStatus.getMessage(code);
     }

+ 116 - 65
ambari-server/src/main/java/org/apache/ambari/server/controller/AmbariServer.java

@@ -19,19 +19,16 @@
 package org.apache.ambari.server.controller;
 
 
-import java.io.File;
-import java.io.IOException;
-import java.net.Authenticator;
-import java.net.BindException;
-import java.net.PasswordAuthentication;
-import java.net.URL;
-import java.util.EnumSet;
-import java.util.Enumeration;
-import java.util.Map;
-
-import javax.crypto.BadPaddingException;
-import javax.servlet.DispatcherType;
-
+import com.google.common.util.concurrent.ServiceManager;
+import com.google.gson.Gson;
+import com.google.inject.Guice;
+import com.google.inject.Inject;
+import com.google.inject.Injector;
+import com.google.inject.Scopes;
+import com.google.inject.Singleton;
+import com.google.inject.name.Named;
+import com.google.inject.persist.Transactional;
+import com.sun.jersey.spi.container.servlet.ServletContainer;
 import org.apache.ambari.eventdb.webservice.WorkflowJsonService;
 import org.apache.ambari.server.AmbariException;
 import org.apache.ambari.server.StateRecoveryManager;
@@ -108,11 +105,15 @@ import org.apache.ambari.server.utils.RetryHelper;
 import org.apache.ambari.server.utils.StageUtils;
 import org.apache.ambari.server.view.ViewRegistry;
 import org.apache.velocity.app.Velocity;
+import org.eclipse.jetty.http.HttpVersion;
+import org.eclipse.jetty.server.HttpConfiguration;
+import org.eclipse.jetty.server.HttpConnectionFactory;
+import org.eclipse.jetty.server.SecureRequestCustomizer;
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.server.SessionIdManager;
 import org.eclipse.jetty.server.SessionManager;
-import org.eclipse.jetty.server.nio.SelectChannelConnector;
-import org.eclipse.jetty.server.ssl.SslSelectChannelConnector;
+import org.eclipse.jetty.server.SslConnectionFactory;
 import org.eclipse.jetty.servlet.DefaultServlet;
 import org.eclipse.jetty.servlet.FilterHolder;
 import org.eclipse.jetty.servlet.ServletContextHandler;
@@ -131,16 +132,18 @@ import org.springframework.web.context.request.RequestContextListener;
 import org.springframework.web.context.support.GenericWebApplicationContext;
 import org.springframework.web.filter.DelegatingFilterProxy;
 
-import com.google.common.util.concurrent.ServiceManager;
-import com.google.gson.Gson;
-import com.google.inject.Guice;
-import com.google.inject.Inject;
-import com.google.inject.Injector;
-import com.google.inject.Scopes;
-import com.google.inject.Singleton;
-import com.google.inject.name.Named;
-import com.google.inject.persist.Transactional;
-import com.sun.jersey.spi.container.servlet.ServletContainer;
+import javax.crypto.BadPaddingException;
+import javax.servlet.DispatcherType;
+import java.io.File;
+import java.io.IOException;
+import java.net.Authenticator;
+import java.net.BindException;
+import java.net.PasswordAuthentication;
+import java.net.URL;
+import java.util.EnumSet;
+import java.util.Enumeration;
+import java.util.HashMap;
+import java.util.Map;
 
 @Singleton
 public class AmbariServer {
@@ -355,10 +358,10 @@ public class AmbariServer {
       if (configs.getAgentSSLAuthentication()) {
         //Secured connector for 2-way auth
         SslContextFactory contextFactoryTwoWay = new SslContextFactory();
-        disableInsecureProtocols(contextFactoryTwoWay);
-
-        SslSelectChannelConnector sslConnectorTwoWay = new SslSelectChannelConnector(contextFactoryTwoWay);
-        sslConnectorTwoWay.setPort(configs.getTwoWayAuthPort());
+        HttpConfiguration httpConfigurationTwoWay = new HttpConfiguration();
+        httpConfigurationTwoWay.setSecureScheme("https");
+        httpConfigurationTwoWay.setSecurePort(configs.getTwoWayAuthPort());
+        httpConfigurationTwoWay.addCustomizer(new SecureRequestCustomizer());
 
         String keystore = configsMap.get(Configuration.SRVR_KSTR_DIR_KEY) + File.separator
             + configsMap.get(Configuration.KSTR_NAME_KEY);
@@ -367,19 +370,21 @@ public class AmbariServer {
             + configsMap.get(Configuration.TSTR_NAME_KEY);
 
         String srvrCrtPass = configsMap.get(Configuration.SRVR_CRT_PASS_KEY);
-        sslConnectorTwoWay.setKeystore(keystore);
-        sslConnectorTwoWay.setTruststore(truststore);
-        sslConnectorTwoWay.setPassword(srvrCrtPass);
-        sslConnectorTwoWay.setKeyPassword(srvrCrtPass);
-        sslConnectorTwoWay.setTrustPassword(srvrCrtPass);
-        sslConnectorTwoWay.setKeystoreType(configsMap.get(Configuration.KSTR_TYPE_KEY));
-        sslConnectorTwoWay.setTruststoreType(configsMap.get(Configuration.TSTR_TYPE_KEY));
-        sslConnectorTwoWay.setNeedClientAuth(configs.getTwoWaySsl());
+
+        contextFactoryTwoWay.setKeyStorePath(keystore);
+        contextFactoryTwoWay.setTrustStorePath(truststore);
+        contextFactoryTwoWay.setKeyManagerPassword(srvrCrtPass);
+        contextFactoryTwoWay.setKeyStorePassword(srvrCrtPass);
+        contextFactoryTwoWay.setTrustStorePassword(srvrCrtPass);
+        contextFactoryTwoWay.setKeyStoreType(configsMap.get(Configuration.KSTR_TYPE_KEY));
+        contextFactoryTwoWay.setTrustStoreType(configsMap.get(Configuration.TSTR_TYPE_KEY));
+        contextFactoryTwoWay.setNeedClientAuth(configs.getTwoWaySsl());
+        disableInsecureProtocols(contextFactoryTwoWay);
 
         //SSL Context Factory
         SslContextFactory contextFactoryOneWay = new SslContextFactory(true);
         contextFactoryOneWay.setKeyStorePath(keystore);
-        contextFactoryOneWay.setTrustStore(truststore);
+        contextFactoryOneWay.setTrustStorePath(truststore);
         contextFactoryOneWay.setKeyStorePassword(srvrCrtPass);
         contextFactoryOneWay.setKeyManagerPassword(srvrCrtPass);
         contextFactoryOneWay.setTrustStorePassword(srvrCrtPass);
@@ -388,15 +393,27 @@ public class AmbariServer {
         contextFactoryOneWay.setNeedClientAuth(false);
         disableInsecureProtocols(contextFactoryOneWay);
 
-        //Secured connector for 1-way auth
-        SslSelectChannelConnector sslConnectorOneWay = new SslSelectChannelConnector(contextFactoryOneWay);
+        HttpConfiguration httpConfigurationOneWay = new HttpConfiguration();
+        httpConfigurationOneWay.setSecureScheme("https");
+        httpConfigurationOneWay.setSecurePort(configs.getOneWayAuthPort());
+        httpConfigurationOneWay.addCustomizer(new SecureRequestCustomizer());
+
+        Map <String, Integer> agentSelectorAcceptorMap = getDesiredAgentAcceptorSelector(serverForAgent);
+        // SSL for 1-way auth
+        ServerConnector sslConnectorOneWay = new ServerConnector(serverForAgent,
+            agentSelectorAcceptorMap.get("desiredAcceptors"), agentSelectorAcceptorMap.get("desiredSelectors"),
+            new SslConnectionFactory(contextFactoryOneWay, HttpVersion.HTTP_1_1.asString()),
+            new HttpConnectionFactory(httpConfigurationOneWay));
+
         sslConnectorOneWay.setPort(configs.getOneWayAuthPort());
 
-        // because there are two connectors sharing the same pool, cut each's
-        // acceptors in half
-        int sslAcceptors = sslConnectorOneWay.getAcceptors();
-        sslConnectorOneWay.setAcceptors(Math.max(2, sslAcceptors / 2));
-        sslConnectorTwoWay.setAcceptors(Math.max(2, sslAcceptors / 2));
+        // SSL for 2-way auth
+        ServerConnector sslConnectorTwoWay = new ServerConnector(serverForAgent,
+            agentSelectorAcceptorMap.get("desiredAcceptors"), agentSelectorAcceptorMap.get("desiredSelectors"),
+            new SslConnectionFactory(contextFactoryTwoWay, HttpVersion.HTTP_1_1.asString()),
+            new HttpConnectionFactory(httpConfigurationTwoWay));
+
+        sslConnectorTwoWay.setPort(configs.getTwoWayAuthPort());
 
         // Agent Jetty thread pool
         configureJettyThreadPool(serverForAgent, sslConnectorOneWay.getAcceptors(),
@@ -405,9 +422,9 @@ public class AmbariServer {
         serverForAgent.addConnector(sslConnectorOneWay);
         serverForAgent.addConnector(sslConnectorTwoWay);
       } else {
-        SelectChannelConnector agentConnector = new SelectChannelConnector();
+        ServerConnector agentConnector = new ServerConnector(serverForAgent);
         agentConnector.setPort(configs.getOneWayAuthPort());
-        agentConnector.setMaxIdleTime(configs.getConnectionMaxIdleTime());
+        agentConnector.setIdleTimeout(configs.getConnectionMaxIdleTime());
 
         // Agent Jetty thread pool
         configureJettyThreadPool(serverForAgent, agentConnector.getAcceptors(), "qtp-ambari-agent",
@@ -473,7 +490,7 @@ public class AmbariServer {
       }
 
       /* Configure the API server to use the NIO connectors */
-      SelectChannelConnector apiConnector;
+      ServerConnector apiConnector;
 
       if (configs.getApiSSLAuthentication()) {
         String httpsKeystore = configsMap.get(Configuration.CLIENT_API_SSL_KSTR_DIR_NAME_KEY) +
@@ -486,21 +503,30 @@ public class AmbariServer {
 
         SslContextFactory contextFactoryApi = new SslContextFactory();
         disableInsecureProtocols(contextFactoryApi);
-        SslSelectChannelConnector sapiConnector = new SslSelectChannelConnector(contextFactoryApi);
-        sapiConnector.setPort(configs.getClientSSLApiPort());
-        sapiConnector.setKeystore(httpsKeystore);
-        sapiConnector.setTruststore(httpsTruststore);
-        sapiConnector.setPassword(httpsCrtPass);
-        sapiConnector.setKeyPassword(httpsCrtPass);
-        sapiConnector.setTrustPassword(httpsCrtPass);
-        sapiConnector.setKeystoreType(configsMap.get(Configuration.CLIENT_API_SSL_KSTR_TYPE_KEY));
-        sapiConnector.setTruststoreType(configsMap.get(Configuration.CLIENT_API_SSL_KSTR_TYPE_KEY));
-        sapiConnector.setMaxIdleTime(configs.getConnectionMaxIdleTime());
-        apiConnector = sapiConnector;
-      } else {
-        apiConnector = new SelectChannelConnector();
+
+        contextFactoryApi.setKeyStorePath(httpsKeystore);
+        contextFactoryApi.setTrustStorePath(httpsTruststore);
+        contextFactoryApi.setKeyManagerPassword(httpsCrtPass);
+        contextFactoryApi.setKeyStorePassword(httpsCrtPass);
+        contextFactoryApi.setTrustStorePassword(httpsCrtPass);
+        contextFactoryApi.setKeyStoreType(configsMap.get(Configuration.CLIENT_API_SSL_KSTR_TYPE_KEY));
+        contextFactoryApi.setTrustStoreType(configsMap.get(Configuration.CLIENT_API_SSL_KSTR_TYPE_KEY));
+
+        HttpConfiguration httpConfigurationSSL = new HttpConfiguration();
+        httpConfigurationSSL.setSecurePort(configs.getClientSSLApiPort());
+
+        ServerConnector https = new ServerConnector(server, new SslConnectionFactory(contextFactoryApi, "http/1.1"),
+            new HttpConnectionFactory(httpConfigurationSSL));
+        https.setPort(configs.getClientSSLApiPort());
+        https.setIdleTimeout(configs.getConnectionMaxIdleTime());
+        apiConnector = https;
+      } else  {
+        HttpConfiguration httpConfiguration = new HttpConfiguration();
+        httpConfiguration.setSecurePort(configs.getClientApiPort());
+
+        apiConnector = new ServerConnector(server, new HttpConnectionFactory(httpConfiguration));
         apiConnector.setPort(configs.getClientApiPort());
-        apiConnector.setMaxIdleTime(configs.getConnectionMaxIdleTime());
+        apiConnector.setIdleTimeout(configs.getConnectionMaxIdleTime());
       }
 
       // Client Jetty thread pool
@@ -577,6 +603,31 @@ public class AmbariServer {
     }
   }
 
+  /**
+   *  Calculate desired Acceptor and Selector for Jetty agent ServerConnector
+   * @param serverForAgent
+   *        the Jetty server instance which will have the selector and Acceptor set on it
+   * @return jettySelectorAcceptorMap
+   *         Map with "desiredAcceptors" and "desiredSelectors" keys
+   */
+  protected Map<String, Integer> getDesiredAgentAcceptorSelector(Server serverForAgent) {
+    ServerConnector serverConnector =  new ServerConnector(serverForAgent);
+    Map <String, Integer> jettySelectorAcceptorMap = new HashMap<>();
+    // By default Jetty-9 assigns Math.max(1, Math.min(4, (cores available to JVM)/8)) acceptors to a ServerConnector
+    int defaultAcceptors =  serverConnector.getAcceptors();
+
+    // By default Jetty-9 assigns Math.max(1, Math.min(4, (cores available to JVM)/2))) selectors to a ServerConnector
+    int defaultSelectors = serverConnector.getSelectorManager().getSelectorCount();
+
+    // because there are two connectors sharing the same pool, cut each's
+    // acceptors and selectors in half
+    int desiredAcceptors = Math.max(2, defaultAcceptors / 2);
+    int desiredSelectors = Math.max(2, defaultSelectors / 2);
+    jettySelectorAcceptorMap.put("desiredAcceptors", desiredAcceptors);
+    jettySelectorAcceptorMap.put("desiredSelectors", desiredSelectors);
+    return jettySelectorAcceptorMap;
+  }
+
   /**
    * The Jetty thread pool consists of three basic types of threads:
    * <ul>
@@ -584,7 +635,7 @@ public class AmbariServer {
    * <li>Selectors</li>
    * <li>Threads which can actually do stuff</li>
    * <ul>
-   * The {@link SelectChannelConnector} uses the
+   * The {@link ServerConnector} uses the
    * {@link Runtime#availableProcessors()} as a way to determine how many
    * acceptors and selectors to create. If the number of processors is too
    * great, then there will be no threads left to fullfil connection requests.
@@ -630,9 +681,9 @@ public class AmbariServer {
         threadPoolName, acceptorThreads * 2, configuredThreadPoolSize,
         Runtime.getRuntime().availableProcessors());
 
-    QueuedThreadPool qtp = new QueuedThreadPool(configuredThreadPoolSize);
+    final QueuedThreadPool qtp = server.getBean(QueuedThreadPool.class);
     qtp.setName(threadPoolName);
-    server.setThreadPool(qtp);
+    qtp.setMaxThreads(configuredThreadPoolSize);
   }
 
   /**

+ 7 - 4
ambari-server/src/test/java/org/apache/ambari/server/api/AmbariErrorHandlerTest.java

@@ -20,13 +20,15 @@ package org.apache.ambari.server.api;
 
 import com.google.gson.Gson;
 import com.google.gson.JsonSyntaxException;
-import com.sun.jersey.api.client.*;
+import com.sun.jersey.api.client.Client;
+import com.sun.jersey.api.client.ClientResponse;
+import com.sun.jersey.api.client.WebResource;
 import org.apache.ambari.server.configuration.Configuration;
+import org.eclipse.jetty.server.Connector;
 import org.eclipse.jetty.server.Server;
+import org.eclipse.jetty.server.ServerConnector;
 import org.eclipse.jetty.servlet.DefaultServlet;
 import org.eclipse.jetty.servlet.ServletContextHandler;
-import org.eclipse.jetty.servlet.ServletHandler;
-import org.eclipse.jetty.servlet.ServletHolder;
 import org.junit.Test;
 
 import javax.servlet.ServletException;
@@ -63,7 +65,8 @@ public class AmbariErrorHandlerTest {
 
     server.start();
 
-    int localPort = server.getConnectors()[0].getLocalPort();
+    Connector connector = server.getConnectors()[0];
+    int localPort = ((ServerConnector)connector).getLocalPort();
 
     Client client = new Client();
     WebResource resource = client.resource("http://localhost:" + localPort + "/");

+ 2 - 2
ambari-server/src/test/java/org/apache/ambari/server/controller/AmbariHandlerListTest.java

@@ -140,10 +140,10 @@ public class AmbariHandlerListTest {
     expect(viewEntity.getClassLoader()).andReturn(classLoader).anyTimes();
 
     expect(handler.isStarted()).andReturn(true).anyTimes();
-    handler.handle("/api/v1/views/TEST/versions/1.0.0/instances/INSTANCE_1/resources/test",
-        baseRequest, request, response);
 
     replay(handler, viewRegistry, viewEntity);
+    handler.handle("/api/v1/views/TEST/versions/1.0.0/instances/INSTANCE_1/resources/test",
+        baseRequest, request, response);
 
     AmbariHandlerList handlerList = getAmbariHandlerList(handler);
     handlerList.viewRegistry = viewRegistry;

+ 0 - 17
ambari-web/pom.xml

@@ -196,23 +196,6 @@
               <commandlineArgs>${args.npm} test</commandlineArgs>
             </configuration>
           </execution>
-          <execution>
-            <id>gzip ambari-web content</id>
-            <phase>prepare-package</phase>
-            <goals>
-              <goal>exec</goal>
-            </goals>
-            <configuration>
-              <executable>${executable.gzip}</executable>
-              <workingDirectory>${basedir}</workingDirectory>
-              <arguments>
-                <argument>-f</argument>
-                <argument>public/javascripts/app.js</argument>
-                <argument>public/javascripts/vendor.js</argument>
-                <argument>public/stylesheets/app.css</argument>
-              </arguments>
-            </configuration>
-          </execution>
         </executions>
       </plugin>
       <plugin>