blob: c1c7ff2ab2e1ef73257d11404d2dd45fcc58d9f2 [file] [log] [blame]
package org.apache.maven.plugins.shade.resource;
/*
* 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 static org.junit.Assert.assertEquals;
import java.io.ByteArrayInputStream;
import java.io.ByteArrayOutputStream;
import java.io.IOException;
import java.io.OutputStream;
import java.util.Arrays;
import java.util.Collections;
import java.util.List;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.JarInputStream;
import java.util.jar.JarOutputStream;
import java.util.jar.Manifest;
import org.apache.maven.plugins.shade.relocation.Relocator;
import org.apache.maven.plugins.shade.relocation.SimpleRelocator;
import org.junit.Before;
import org.junit.Test;
public class ManifestResourceTransformerTest
{
private ManifestResourceTransformer transformer;
@Before
public void setUp()
{
transformer = new ManifestResourceTransformer();
}
@Test
public void rewriteDefaultAttributes() throws Exception
{
final Manifest manifest = new Manifest();
final Attributes attributes = manifest.getMainAttributes();
attributes.put(Attributes.Name.MANIFEST_VERSION, "1.0");
attributes.putValue("Export-Package",
"javax.decorator;version=\"2.0\";uses:=\"javax.enterprise.inject\"," +
"javax.enterprise.context;version=\"2.0\";uses:=\"javax.enterprise.util,javax.inject\"");
attributes.putValue("Import-Package",
"javax.el,javax.enterprise.context;version=\"[2.0,3)\"");
attributes.putValue("Provide-Capability",
"osgi.contract;osgi.contract=JavaCDI;uses:=\"" +
"javax.enterprise.context,javax.enterprise.context.spi,javax.enterprise.context.control," +
"javax.enterprise.util,javax.enterprise.inject,javax.enterprise.inject.spi," +
"javax.enterprise.inject.spi.configurator,javax.enterprise.inject.literal," +
"javax.enterprise.inject.se,javax.enterprise.event,javax.decorator\";" +
"version:List<Version>=\"2.0,1.2,1.1,1.0\"");
attributes.putValue("Require-Capability",
"osgi.serviceloader;" +
"filter:=\"(osgi.serviceloader=javax.enterprise.inject.se.SeContainerInitializer)\";" +
"cardinality:=multiple," +
"osgi.serviceloader;" +
"filter:=\"(osgi.serviceloader=javax.enterprise.inject.spi.CDIProvider)\";" +
"cardinality:=multiple,osgi.extender;" +
"filter:=\"(osgi.extender=osgi.serviceloader.processor)\"," +
"osgi.contract;osgi.contract=JavaEL;filter:=\"(&(osgi.contract=JavaEL)(version=2.2.0))\"," +
"osgi.contract;osgi.contract=JavaInterceptor;" +
"filter:=\"(&(osgi.contract=JavaInterceptor)(version=1.2.0))\"," +
"osgi.contract;osgi.contract=JavaInject;" +
"filter:=\"(&(osgi.contract=JavaInject)(version=1.0.0))\"," +
"osgi.ee;filter:=\"(&(osgi.ee=JavaSE)(version=1.8))\"");
List<Relocator> relocators =
Collections.<Relocator>singletonList( new SimpleRelocator( "javax", "jakarta",
Collections.<String>emptyList(),
Collections.<String>emptyList() ) );
final ByteArrayOutputStream out = transform( manifest, relocators );
try ( final JarInputStream jis = new JarInputStream( new ByteArrayInputStream( out.toByteArray() ) ) )
{
final Attributes attrs = jis.getManifest().getMainAttributes();
assertEquals(
"jakarta.decorator;version=\"2.0\";uses:=\"jakarta.enterprise.inject\"," +
"jakarta.enterprise.context;version=\"2.0\";uses:=\"jakarta.enterprise.util," +
"jakarta.inject\"",
attrs.getValue("Export-Package"));
assertEquals("jakarta.el,jakarta.enterprise.context;version=\"[2.0,3)\"",
attrs.getValue("Import-Package"));
assertEquals(
"osgi.contract;osgi.contract=JavaCDI;" +
"uses:=\"jakarta.enterprise.context," +
"jakarta.enterprise.context.spi,jakarta.enterprise.context.control," +
"jakarta.enterprise.util,jakarta.enterprise.inject,jakarta.enterprise.inject.spi," +
"jakarta.enterprise.inject.spi.configurator,jakarta.enterprise.inject.literal," +
"jakarta.enterprise.inject.se,jakarta.enterprise.event," +
"jakarta.decorator\";version:List<Version>=\"2.0,1.2,1.1,1.0\"",
attrs.getValue("Provide-Capability"));
assertEquals(
"osgi.serviceloader;" +
"filter:=\"(osgi.serviceloader=jakarta.enterprise.inject.se.SeContainerInitializer)\";" +
"cardinality:=multiple,osgi.serviceloader;" +
"filter:=\"(osgi.serviceloader=jakarta.enterprise.inject.spi.CDIProvider)\";" +
"cardinality:=multiple,osgi.extender;" +
"filter:=\"(osgi.extender=osgi.serviceloader.processor)\"," +
"osgi.contract;osgi.contract=JavaEL;filter:=\"(&(osgi.contract=JavaEL)(version=2.2.0))\"," +
"osgi.contract;osgi.contract=JavaInterceptor;" +
"filter:=\"(&(osgi.contract=JavaInterceptor)(version=1.2.0))\"," +
"osgi.contract;osgi.contract=JavaInject;" +
"filter:=\"(&(osgi.contract=JavaInject)(version=1.0.0))\"," +
"osgi.ee;filter:=\"(&(osgi.ee=JavaSE)(version=1.8))\"",
attrs.getValue("Require-Capability"));
}
}
@Test
public void rewriteAdditionalAttributes() throws Exception
{
final Manifest manifest = new Manifest();
final Attributes attributes = manifest.getMainAttributes();
attributes.put(Attributes.Name.MANIFEST_VERSION, "1.0");
attributes.putValue("description-custom",
"This jar uses javax packages");
List<Relocator> relocators =
Collections.<Relocator>singletonList( new SimpleRelocator( "javax", "jakarta",
Collections.<String>emptyList(),
Collections.<String>emptyList() ) );
transformer.setAdditionalAttributes( Arrays.asList("description-custom", "attribute-unknown") );
final ByteArrayOutputStream out = transform( manifest, relocators );
try ( final JarInputStream jis = new JarInputStream( new ByteArrayInputStream( out.toByteArray() ) ) )
{
final Attributes attrs = jis.getManifest().getMainAttributes();
assertEquals( "This jar uses jakarta packages", attrs.getValue( "description-custom" ) );
}
}
private ByteArrayOutputStream transform( final Manifest manifest, List<Relocator> relocators )
throws IOException
{
final ByteArrayOutputStream mboas = new ByteArrayOutputStream();
try ( final OutputStream mos = mboas )
{
manifest.write( mos );
}
transformer.processResource( JarFile.MANIFEST_NAME, new ByteArrayInputStream( mboas.toByteArray() ),
relocators );
final ByteArrayOutputStream out = new ByteArrayOutputStream();
try ( final JarOutputStream jarOutputStream = new JarOutputStream( out ) )
{
transformer.modifyOutputStream( jarOutputStream );
}
return out;
}
}