View Javadoc

1   //
2   //  ========================================================================
3   //  Copyright (c) 1995-2016 Mort Bay Consulting Pty. Ltd.
4   //  ------------------------------------------------------------------------
5   //  All rights reserved. This program and the accompanying materials
6   //  are made available under the terms of the Eclipse Public License v1.0
7   //  and Apache License v2.0 which accompanies this distribution.
8   //
9   //      The Eclipse Public License is available at
10  //      http://www.eclipse.org/legal/epl-v10.html
11  //
12  //      The Apache License v2.0 is available at
13  //      http://www.opensource.org/licenses/apache2.0.php
14  //
15  //  You may elect to redistribute this code under either of these licenses.
16  //  ========================================================================
17  //
18  
19  
20  package org.eclipse.jetty.maven.plugin;
21  
22  import java.io.File;
23  import java.io.IOException;
24  
25  import org.apache.maven.plugin.MojoExecutionException;
26  import org.apache.maven.plugin.MojoFailureException;
27  import org.eclipse.jetty.annotations.AnnotationConfiguration;
28  import org.eclipse.jetty.util.IO;
29  import org.eclipse.jetty.util.resource.Resource;
30  import org.eclipse.jetty.util.thread.QueuedThreadPool;
31  
32  /**
33   * JettyEffectiveWebXml
34   *
35   * @goal effective-web-xml
36   * @requiresDependencyResolution test
37   * @execute phase="test-compile"
38   * @description Runs jetty on the unassembled webapp to generate the effective web.xml
39   */
40  public class JettyEffectiveWebXml extends JettyRunMojo
41  {
42      /**
43       * The target directory
44       * 
45       * @parameter default-value="${project.build.directory}"
46       * @required
47       * @readonly
48       */
49      protected File target;
50      
51      /**
52       * The target directory
53       * 
54       * @parameter 
55       */
56      protected File effectiveWebXml;
57      
58      
59      protected boolean deleteOnExit = true;
60      
61  
62      /**
63       * @see org.apache.maven.plugin.Mojo#execute()
64       */
65      public void execute() throws MojoExecutionException, MojoFailureException
66      {
67          super.execute();
68      }
69      
70      
71      @Override
72      public void startJetty() throws MojoExecutionException
73      {
74          //Only do enough setup to be able to produce a quickstart-web.xml file 
75          
76  
77          
78          QueuedThreadPool tpool = null;
79          
80          try
81          {
82              printSystemProperties();
83  
84              //apply any config from a jetty.xml file first to our "fake" server instance
85              //TODO probably not necessary
86              applyJettyXml ();  
87          
88              ServerSupport.configureHandlers(server, null);
89              ServerSupport.configureDefaultConfigurationClasses(server);
90                     
91              //ensure config of the webapp based on settings in plugin
92              configureWebApplication();
93              
94              
95              //set the webapp up to do very little other than generate the quickstart-web.xml
96              webApp.setCopyWebDir(false);
97              webApp.setCopyWebInf(false);
98              webApp.setGenerateQuickStart(true);
99  
100             //if the user didn't nominate a file to generate into, pick the name and
101             //make sure that it is deleted on exit
102             if (webApp.getQuickStartWebDescriptor() == null)
103             {
104                 if (effectiveWebXml == null)
105                 {
106                     deleteOnExit = true;
107                     effectiveWebXml = new File(target, "effective-web.xml");
108                     effectiveWebXml.deleteOnExit();
109                 }
110 
111                 Resource descriptor = Resource.newResource(effectiveWebXml);
112 
113                 if (!effectiveWebXml.getParentFile().exists())
114                     effectiveWebXml.getParentFile().mkdirs();
115                 if (!effectiveWebXml.exists())
116                     effectiveWebXml.createNewFile();
117 
118                 webApp.setQuickStartWebDescriptor(descriptor);
119             }
120             
121             ServerSupport.addWebApplication(server, webApp);
122                        
123             //if our server has a thread pool associated we can do any annotation scanning multithreaded,
124             //otherwise scanning will be single threaded
125             tpool = server.getBean(QueuedThreadPool.class);
126             if (tpool != null)
127                 tpool.start();
128             else
129                 webApp.setAttribute(AnnotationConfiguration.MULTI_THREADED, Boolean.FALSE.toString());
130             
131              webApp.start(); //just enough to generate the quickstart           
132            
133         }
134         catch (Exception e)
135         {
136             throw new MojoExecutionException("Effective web.xml generation failed", e);
137         }
138         finally
139         {
140             try {webApp.stop();}catch (Exception x) {};
141             
142             try {if (tpool != null) tpool.stop();} catch (Exception x) {};
143         }
144          
145        
146         if (deleteOnExit)
147         {
148             try
149             {
150                 //just show the result in the log
151                 getLog().info(IO.toString(webApp.getQuickStartWebDescriptor().getInputStream()));
152             }
153             catch (IOException e)
154             {
155                throw new MojoExecutionException("Unable to output effective web.xml", e);
156             }
157             
158         }
159         
160     }
161 }