mirror of
https://github.com/jetty/jetty.project.git
synced 2025-03-04 04:49:12 +00:00
Merge branch 'jetty-9.2.x' into pr/23
This commit is contained in:
commit
186aac6788
@ -252,6 +252,12 @@ public abstract class AbstractWebAppProvider extends AbstractLifeCycle implement
|
||||
(overrideBundleInstallLocation == null
|
||||
? BundleFileLocatorHelperFactory.getFactory().getHelper().getBundleInstallLocation(_bundle)
|
||||
: new File(overrideBundleInstallLocation));
|
||||
|
||||
if (LOG.isDebugEnabled())
|
||||
{
|
||||
LOG.debug("Bundle location is {}, install location: {}", _bundle.getLocation(), bundleInstallLocation);
|
||||
}
|
||||
|
||||
URL url = null;
|
||||
Resource rootResource = Resource.newResource(BundleFileLocatorHelperFactory.getFactory().getHelper().getLocalURL(bundleInstallLocation.toURI().toURL()));
|
||||
//try and make sure the rootResource is useable - if its a jar then make it a jar file url
|
||||
@ -266,6 +272,8 @@ public abstract class AbstractWebAppProvider extends AbstractLifeCycle implement
|
||||
if (_webAppPath == null || _webAppPath.length() == 0 || ".".equals(_webAppPath))
|
||||
{
|
||||
url = bundleInstallLocation.toURI().toURL();
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Webapp base using bundle install location: {}", url);
|
||||
}
|
||||
else
|
||||
{
|
||||
@ -273,16 +281,24 @@ public abstract class AbstractWebAppProvider extends AbstractLifeCycle implement
|
||||
if (_webAppPath.startsWith("/") || _webAppPath.startsWith("file:"))
|
||||
{
|
||||
url = new File(_webAppPath).toURI().toURL();
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Webapp base using absolute location: {}", url);
|
||||
}
|
||||
else if (bundleInstallLocation != null && bundleInstallLocation.isDirectory())
|
||||
{
|
||||
url = new File(bundleInstallLocation, _webAppPath).toURI().toURL();
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Webapp base using path relative to bundle unpacked install location: {}", url);
|
||||
}
|
||||
else if (bundleInstallLocation != null)
|
||||
{
|
||||
Enumeration<URL> urls = BundleFileLocatorHelperFactory.getFactory().getHelper().findEntries(_bundle, _webAppPath);
|
||||
if (urls != null && urls.hasMoreElements())
|
||||
{
|
||||
url = urls.nextElement();
|
||||
if (LOG.isDebugEnabled())
|
||||
LOG.debug("Webapp base using path relative to packed bundle location: {}", url);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
|
@ -105,6 +105,7 @@ public class OSGiWebInfConfiguration extends WebInfConfiguration
|
||||
|
||||
for (Bundle bundle : bundles)
|
||||
{
|
||||
LOG.debug("Checking bundle {}:{}", bundle.getBundleId(), bundle.getSymbolicName());
|
||||
if (pattern != null)
|
||||
{
|
||||
// if bundle symbolic name matches the pattern
|
||||
|
@ -42,7 +42,7 @@ public class SelectChannelTimeoutTest extends ConnectorTimeoutTest
|
||||
startServer(connector);
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test(timeout=60000)
|
||||
public void testIdleTimeoutAfterSuspend() throws Exception
|
||||
{
|
||||
SuspendHandler _handler = new SuspendHandler();
|
||||
@ -57,7 +57,7 @@ public class SelectChannelTimeoutTest extends ConnectorTimeoutTest
|
||||
assertTrue(process(null).toUpperCase(Locale.ENGLISH).contains("RESUMED"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test(timeout=60000)
|
||||
public void testIdleTimeoutAfterTimeout() throws Exception
|
||||
{
|
||||
SuspendHandler _handler = new SuspendHandler();
|
||||
@ -71,7 +71,7 @@ public class SelectChannelTimeoutTest extends ConnectorTimeoutTest
|
||||
assertTrue(process(null).toUpperCase(Locale.ENGLISH).contains("TIMEOUT"));
|
||||
}
|
||||
|
||||
@Test
|
||||
@Test(timeout=60000)
|
||||
public void testIdleTimeoutAfterComplete() throws Exception
|
||||
{
|
||||
SuspendHandler _handler = new SuspendHandler();
|
||||
|
@ -29,6 +29,8 @@ import org.eclipse.jetty.http.HttpStatus;
|
||||
import org.eclipse.jetty.http.HttpTester;
|
||||
import org.eclipse.jetty.server.HttpConfiguration;
|
||||
import org.eclipse.jetty.servlet.FilterHolder;
|
||||
import org.eclipse.jetty.servlets.gzip.AsyncScheduledWrite;
|
||||
import org.eclipse.jetty.servlets.gzip.AsyncTimeoutWrite;
|
||||
import org.eclipse.jetty.servlets.gzip.GzipTester;
|
||||
import org.eclipse.jetty.servlets.gzip.TestServletBufferTypeLengthWrite;
|
||||
import org.eclipse.jetty.servlets.gzip.TestServletLengthStreamTypeWrite;
|
||||
@ -38,13 +40,13 @@ import org.eclipse.jetty.servlets.gzip.TestServletStreamLengthTypeWriteWithFlush
|
||||
import org.eclipse.jetty.servlets.gzip.TestServletStreamTypeLengthWrite;
|
||||
import org.eclipse.jetty.servlets.gzip.TestServletTypeLengthStreamWrite;
|
||||
import org.eclipse.jetty.servlets.gzip.TestServletTypeStreamLengthWrite;
|
||||
import org.eclipse.jetty.toolchain.test.TestTracker;
|
||||
import org.eclipse.jetty.toolchain.test.TestingDir;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Assert;
|
||||
import org.junit.Ignore;
|
||||
import org.junit.Rule;
|
||||
import org.junit.Test;
|
||||
import org.junit.rules.TestWatcher;
|
||||
import org.junit.runner.Description;
|
||||
import org.junit.runner.RunWith;
|
||||
import org.junit.runners.Parameterized;
|
||||
import org.junit.runners.Parameterized.Parameters;
|
||||
@ -57,20 +59,8 @@ import org.junit.runners.Parameterized.Parameters;
|
||||
@RunWith(Parameterized.class)
|
||||
public class GzipFilterContentLengthTest
|
||||
{
|
||||
|
||||
@Rule
|
||||
public final TestWatcher testName = new TestWatcher()
|
||||
{
|
||||
|
||||
@Override
|
||||
public void starting(Description description)
|
||||
{
|
||||
super.starting(description);
|
||||
System.err.printf("Running %s.%s()%n",
|
||||
description.getClassName(),
|
||||
description.getMethodName());
|
||||
}
|
||||
};
|
||||
public final TestTracker tracker = new TestTracker();
|
||||
|
||||
/**
|
||||
* These are the junit parameters for running this test.
|
||||
@ -85,11 +75,13 @@ public class GzipFilterContentLengthTest
|
||||
*
|
||||
* @return the junit parameters
|
||||
*/
|
||||
@Parameters
|
||||
@Parameters(name="{2}/{1} {0}")
|
||||
public static List<Object[]> data()
|
||||
{
|
||||
return Arrays.asList(new Object[][]
|
||||
{
|
||||
{ AsyncGzipFilter.class, AsyncTimeoutWrite.class, GzipFilter.GZIP },
|
||||
{ AsyncGzipFilter.class, AsyncScheduledWrite.class, GzipFilter.GZIP },
|
||||
{ AsyncGzipFilter.class, TestServletLengthStreamTypeWrite.class, GzipFilter.GZIP },
|
||||
{ AsyncGzipFilter.class, TestServletLengthTypeStreamWrite.class, GzipFilter.GZIP },
|
||||
{ AsyncGzipFilter.class, TestServletStreamLengthTypeWrite.class, GzipFilter.GZIP },
|
||||
@ -99,6 +91,8 @@ public class GzipFilterContentLengthTest
|
||||
{ AsyncGzipFilter.class, TestServletTypeStreamLengthWrite.class, GzipFilter.GZIP },
|
||||
{ AsyncGzipFilter.class, TestServletBufferTypeLengthWrite.class, GzipFilter.GZIP },
|
||||
|
||||
//{ GzipFilter.class, AsyncTimeoutWrite.class, GzipFilter.GZIP },
|
||||
//{ GzipFilter.class, AsyncScheduledWrite.class, GzipFilter.GZIP },
|
||||
{ GzipFilter.class, TestServletLengthStreamTypeWrite.class, GzipFilter.GZIP },
|
||||
{ GzipFilter.class, TestServletLengthTypeStreamWrite.class, GzipFilter.GZIP },
|
||||
{ GzipFilter.class, TestServletStreamLengthTypeWrite.class, GzipFilter.GZIP },
|
||||
@ -107,6 +101,8 @@ public class GzipFilterContentLengthTest
|
||||
{ GzipFilter.class, TestServletTypeLengthStreamWrite.class, GzipFilter.GZIP },
|
||||
{ GzipFilter.class, TestServletTypeStreamLengthWrite.class, GzipFilter.GZIP },
|
||||
|
||||
//{ GzipFilter.class, AsyncTimeoutWrite.class, GzipFilter.DEFLATE },
|
||||
//{ GzipFilter.class, AsyncScheduledWrite.class, GzipFilter.DEFLATE },
|
||||
{ GzipFilter.class, TestServletLengthStreamTypeWrite.class, GzipFilter.DEFLATE },
|
||||
{ GzipFilter.class, TestServletLengthTypeStreamWrite.class, GzipFilter.DEFLATE },
|
||||
{ GzipFilter.class, TestServletStreamLengthTypeWrite.class, GzipFilter.DEFLATE },
|
||||
|
@ -68,6 +68,7 @@ public class GzipFilterDefaultTest
|
||||
this.compressionType = compressionType;
|
||||
}
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class HttpStatusServlet extends HttpServlet
|
||||
{
|
||||
private int _status = 204;
|
||||
@ -86,6 +87,7 @@ public class GzipFilterDefaultTest
|
||||
|
||||
}
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class HttpErrorServlet extends HttpServlet
|
||||
{
|
||||
private int _status = 400;
|
||||
@ -104,6 +106,7 @@ public class GzipFilterDefaultTest
|
||||
}
|
||||
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class HttpContentTypeWithEncoding extends HttpServlet
|
||||
{
|
||||
public static final String COMPRESSED_CONTENT = "<html><head></head><body><h1>COMPRESSABLE CONTENT</h1>"+
|
||||
@ -154,6 +157,7 @@ public class GzipFilterDefaultTest
|
||||
}
|
||||
}
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public static class GetServlet extends DefaultServlet
|
||||
{
|
||||
public GetServlet()
|
||||
@ -191,6 +195,7 @@ public class GzipFilterDefaultTest
|
||||
try
|
||||
{
|
||||
tester.start();
|
||||
@SuppressWarnings("unused")
|
||||
HttpTester.Response http = tester.assertIsResponseNotGzipCompressed("GET","empty.txt",0,200);
|
||||
}
|
||||
finally
|
||||
@ -278,6 +283,7 @@ public class GzipFilterDefaultTest
|
||||
GzipTester tester = new GzipTester(testingdir, compressionType);
|
||||
tester.setGzipFilterClass(testFilter);
|
||||
tester.copyTestServerFile("test.svg");
|
||||
@SuppressWarnings("unused")
|
||||
FilterHolder holder = tester.setContentServlet(org.eclipse.jetty.servlet.DefaultServlet.class);
|
||||
try
|
||||
{
|
||||
@ -632,6 +638,7 @@ public class GzipFilterDefaultTest
|
||||
GzipTester tester = new GzipTester(testingdir,compressionType);
|
||||
tester.setGzipFilterClass(testFilter);
|
||||
|
||||
@SuppressWarnings("unused")
|
||||
FilterHolder holder = tester.setContentServlet(DefaultServlet.class);
|
||||
tester.copyTestServerFile("test.svgz");
|
||||
try
|
||||
|
@ -0,0 +1,89 @@
|
||||
//
|
||||
// ========================================================================
|
||||
// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
|
||||
// ------------------------------------------------------------------------
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
//
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
//
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
//
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.servlets.gzip;
|
||||
|
||||
import java.io.IOException;
|
||||
import java.util.concurrent.Executors;
|
||||
import java.util.concurrent.ScheduledExecutorService;
|
||||
import java.util.concurrent.TimeUnit;
|
||||
|
||||
import javax.servlet.AsyncContext;
|
||||
import javax.servlet.ServletConfig;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class AsyncScheduledWrite extends TestDirContentServlet
|
||||
{
|
||||
private static class DispatchBack implements Runnable
|
||||
{
|
||||
private final AsyncContext ctx;
|
||||
|
||||
public DispatchBack(AsyncContext ctx)
|
||||
{
|
||||
this.ctx = ctx;
|
||||
}
|
||||
|
||||
@Override
|
||||
public void run()
|
||||
{
|
||||
ctx.dispatch();
|
||||
}
|
||||
}
|
||||
|
||||
private ScheduledExecutorService scheduler;
|
||||
|
||||
public void init(ServletConfig config) throws ServletException
|
||||
{
|
||||
super.init(config);
|
||||
scheduler = Executors.newScheduledThreadPool(3);
|
||||
}
|
||||
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
Boolean suspended = (Boolean)request.getAttribute("SUSPENDED");
|
||||
if (suspended==null || !suspended)
|
||||
{
|
||||
request.setAttribute("SUSPENDED",Boolean.TRUE);
|
||||
AsyncContext ctx = request.startAsync();
|
||||
ctx.setTimeout(0);
|
||||
scheduler.schedule(new DispatchBack(ctx),500,TimeUnit.MILLISECONDS);
|
||||
}
|
||||
else
|
||||
{
|
||||
String fileName = request.getServletPath();
|
||||
byte[] dataBytes = loadContentFileBytes(fileName);
|
||||
|
||||
response.setContentLength(dataBytes.length);
|
||||
|
||||
ServletOutputStream out = response.getOutputStream();
|
||||
|
||||
if (fileName.endsWith("txt"))
|
||||
response.setContentType("text/plain");
|
||||
else if (fileName.endsWith("mp3"))
|
||||
response.setContentType("audio/mpeg");
|
||||
response.setHeader("ETag","W/etag-" + fileName);
|
||||
|
||||
out.write(dataBytes);
|
||||
}
|
||||
}
|
||||
}
|
@ -0,0 +1,89 @@
|
||||
//
|
||||
// ========================================================================
|
||||
// Copyright (c) 1995-2014 Mort Bay Consulting Pty. Ltd.
|
||||
// ------------------------------------------------------------------------
|
||||
// All rights reserved. This program and the accompanying materials
|
||||
// are made available under the terms of the Eclipse Public License v1.0
|
||||
// and Apache License v2.0 which accompanies this distribution.
|
||||
//
|
||||
// The Eclipse Public License is available at
|
||||
// http://www.eclipse.org/legal/epl-v10.html
|
||||
//
|
||||
// The Apache License v2.0 is available at
|
||||
// http://www.opensource.org/licenses/apache2.0.php
|
||||
//
|
||||
// You may elect to redistribute this code under either of these licenses.
|
||||
// ========================================================================
|
||||
//
|
||||
|
||||
package org.eclipse.jetty.servlets.gzip;
|
||||
|
||||
import java.io.IOException;
|
||||
|
||||
import javax.servlet.AsyncContext;
|
||||
import javax.servlet.AsyncEvent;
|
||||
import javax.servlet.AsyncListener;
|
||||
import javax.servlet.ServletException;
|
||||
import javax.servlet.ServletOutputStream;
|
||||
import javax.servlet.http.HttpServletRequest;
|
||||
import javax.servlet.http.HttpServletResponse;
|
||||
|
||||
@SuppressWarnings("serial")
|
||||
public class AsyncTimeoutWrite extends TestDirContentServlet implements AsyncListener
|
||||
{
|
||||
@Override
|
||||
protected void doGet(HttpServletRequest request, HttpServletResponse response) throws ServletException, IOException
|
||||
{
|
||||
if (request.getAttribute("filename")!=null)
|
||||
throw new IllegalStateException();
|
||||
|
||||
ServletOutputStream out = response.getOutputStream();
|
||||
|
||||
AsyncContext ctx = (AsyncContext)request.getAttribute(AsyncContext.class.getName());
|
||||
ctx = request.startAsync();
|
||||
String fileName = request.getServletPath();
|
||||
request.setAttribute("filename",fileName);
|
||||
ctx.addListener(this);
|
||||
ctx.setTimeout(200);
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onComplete(AsyncEvent event) throws IOException
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onTimeout(AsyncEvent event) throws IOException
|
||||
{
|
||||
HttpServletRequest request = (HttpServletRequest)event.getSuppliedRequest();
|
||||
HttpServletResponse response = (HttpServletResponse)event.getSuppliedResponse();
|
||||
|
||||
String fileName = (String)request.getAttribute("filename");
|
||||
byte[] dataBytes = loadContentFileBytes(fileName);
|
||||
|
||||
response.setContentLength(dataBytes.length);
|
||||
|
||||
ServletOutputStream out = response.getOutputStream();
|
||||
|
||||
if (fileName.endsWith("txt"))
|
||||
response.setContentType("text/plain");
|
||||
else if (fileName.endsWith("mp3"))
|
||||
response.setContentType("audio/mpeg");
|
||||
response.setHeader("ETag","W/etag-" + fileName);
|
||||
|
||||
out.write(dataBytes);
|
||||
|
||||
event.getAsyncContext().complete();
|
||||
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onError(AsyncEvent event) throws IOException
|
||||
{
|
||||
}
|
||||
|
||||
@Override
|
||||
public void onStartAsync(AsyncEvent event) throws IOException
|
||||
{
|
||||
}
|
||||
}
|
@ -59,11 +59,15 @@ import org.eclipse.jetty.servlets.GzipFilter;
|
||||
import org.eclipse.jetty.toolchain.test.IO;
|
||||
import org.eclipse.jetty.toolchain.test.MavenTestingUtils;
|
||||
import org.eclipse.jetty.toolchain.test.TestingDir;
|
||||
import org.eclipse.jetty.util.log.Log;
|
||||
import org.eclipse.jetty.util.log.Logger;
|
||||
import org.hamcrest.Matchers;
|
||||
import org.junit.Assert;
|
||||
|
||||
public class GzipTester
|
||||
{
|
||||
private static final Logger LOG = Log.getLogger(GzipTester.class);
|
||||
|
||||
private Class<? extends Filter> gzipFilterClass = GzipFilter.class;
|
||||
private String encoding = "ISO8859_1";
|
||||
private String userAgent = null;
|
||||
@ -165,7 +169,6 @@ public class GzipTester
|
||||
|
||||
public HttpTester.Response assertIsResponseGzipCompressed(String method, String requestedFilename, String serverFilename, long ifmodifiedsince) throws Exception
|
||||
{
|
||||
// System.err.printf("[GzipTester] requesting /context/%s%n",requestedFilename);
|
||||
HttpTester.Request request = HttpTester.newRequest();
|
||||
HttpTester.Response response;
|
||||
|
||||
@ -186,10 +189,10 @@ public class GzipTester
|
||||
// Assert.assertThat("Response.status",response.getStatus(),is(HttpServletResponse.SC_OK));
|
||||
|
||||
// Response headers should have either a Transfer-Encoding indicating chunked OR a Content-Length
|
||||
/* TODO need to check for the 3rd option of EOF content. To do this properly you might need to look at both HTTP/1.1 and HTTP/1.0 requests
|
||||
String contentLength = response.get("Content-Length");
|
||||
String transferEncoding = response.get("Transfer-Encoding");
|
||||
|
||||
/* TODO need to check for the 3rd option of EOF content. To do this properly you might need to look at both HTTP/1.1 and HTTP/1.0 requests
|
||||
boolean chunked = (transferEncoding != null) && (transferEncoding.indexOf("chunk") >= 0);
|
||||
if(!chunked) {
|
||||
Assert.assertThat("Response.header[Content-Length]",contentLength,notNullValue());
|
||||
@ -243,7 +246,7 @@ public class GzipTester
|
||||
|
||||
|
||||
public HttpTester.Response assertIsResponseNotModified(String method, String requestedFilename, long ifmodifiedsince) throws Exception
|
||||
{ // System.err.printf("[GzipTester] requesting /context/%s%n",requestedFilename);
|
||||
{
|
||||
HttpTester.Request request = HttpTester.newRequest();
|
||||
HttpTester.Response response;
|
||||
|
||||
@ -304,7 +307,6 @@ public class GzipTester
|
||||
*/
|
||||
public void assertIsResponseNotGzipFiltered(String requestedFilename, String testResourceSha1Sum, String expectedContentType, String expectedContentEncoding) throws Exception
|
||||
{
|
||||
//System.err.printf("[GzipTester] requesting /context/%s%n",requestedFilename);
|
||||
HttpTester.Request request = HttpTester.newRequest();
|
||||
HttpTester.Response response;
|
||||
|
||||
@ -356,14 +358,13 @@ public class GzipTester
|
||||
|
||||
private void dumpHeaders(String prefix, HttpTester.Message message)
|
||||
{
|
||||
//System.out.println(prefix);
|
||||
@SuppressWarnings("unchecked")
|
||||
LOG.debug("dumpHeaders: {}", prefix);
|
||||
Enumeration<String> names = message.getFieldNames();
|
||||
while (names.hasMoreElements())
|
||||
{
|
||||
String name = names.nextElement();
|
||||
String value = message.get(name);
|
||||
//System.out.printf(" [%s] = %s%n",name,value);
|
||||
LOG.debug("dumpHeaders: {} = {}",name,value);
|
||||
}
|
||||
}
|
||||
|
||||
@ -469,7 +470,6 @@ public class GzipTester
|
||||
|
||||
private HttpTester.Response executeRequest(String method, String uri) throws IOException, Exception
|
||||
{
|
||||
//System.err.printf("[GzipTester] requesting %s%n",uri);
|
||||
HttpTester.Request request = HttpTester.newRequest();
|
||||
HttpTester.Response response;
|
||||
|
||||
@ -611,7 +611,7 @@ public class GzipTester
|
||||
ServletHolder servletHolder = tester.addServlet(servletClass,"/");
|
||||
servletHolder.setInitParameter("baseDir",testdir.getDir().getAbsolutePath());
|
||||
servletHolder.setInitParameter("etags","true");
|
||||
FilterHolder holder = tester.addFilter(gzipFilterClass,"/*",EnumSet.allOf(DispatcherType.class));
|
||||
FilterHolder holder = tester.addFilter(gzipFilterClass,"/*",EnumSet.of(DispatcherType.REQUEST));
|
||||
holder.setInitParameter("vary","Accept-Encoding");
|
||||
return holder;
|
||||
}
|
||||
|
@ -17,6 +17,46 @@
|
||||
<verbose>false</verbose>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.maven.plugins</groupId>
|
||||
<artifactId>maven-jar-plugin</artifactId>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>artifact-jar</id>
|
||||
<goals>
|
||||
<goal>jar</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<archive>
|
||||
<manifestFile>target/classes/META-INF/MANIFEST.MF</manifestFile>
|
||||
</archive>
|
||||
</configuration>
|
||||
</plugin>
|
||||
<plugin>
|
||||
<groupId>org.apache.felix</groupId>
|
||||
<artifactId>maven-bundle-plugin</artifactId>
|
||||
<extensions>true</extensions>
|
||||
<executions>
|
||||
<execution>
|
||||
<id>bundle-manifest</id>
|
||||
<phase>process-classes</phase>
|
||||
<goals>
|
||||
<goal>manifest</goal>
|
||||
</goals>
|
||||
</execution>
|
||||
</executions>
|
||||
<configuration>
|
||||
<instructions>
|
||||
<Bundle-SymbolicName>org.eclipse.jetty.tests.test-web-fragment;singleton:=true</Bundle-SymbolicName>
|
||||
<Bundle-Description>A bundle containing web fragment for testing</Bundle-Description>
|
||||
<Export-Package>com.acme.fragment;version="${parsedVersion.majorVersion}.${parsedVersion.minorVersion}.${parsedVersion.incrementalVersion}"</Export-Package>
|
||||
<_nouses>true</_nouses>
|
||||
</instructions>
|
||||
</configuration>
|
||||
</plugin>
|
||||
|
||||
</plugins>
|
||||
</build>
|
||||
<dependencies>
|
||||
@ -24,12 +64,5 @@
|
||||
<groupId>javax.servlet</groupId>
|
||||
<artifactId>javax.servlet-api</artifactId>
|
||||
</dependency>
|
||||
|
||||
<!--
|
||||
<dependency>
|
||||
<groupId>org.eclipse.jetty.orbit</groupId>
|
||||
<artifactId>javax.servlet</artifactId>
|
||||
</dependency>
|
||||
-->
|
||||
</dependencies>
|
||||
</project>
|
||||
|
Loading…
x
Reference in New Issue
Block a user