Common base implementations for the ShrinkWrap project enabling declarative assembly of Java archives (JAR, WAR, EAR, RAR) in code
—
Container implementations provide complete functionality for managing archive contents including classes, resources, libraries, and metadata. These classes form the backbone of ShrinkWrap's container-based API.
The foundational container implementation providing comprehensive archive management capabilities.
public abstract class ContainerBase<T extends Archive<T>> extends MemoryMapArchiveBase<T>
implements Archive<T>, ManifestContainer<T>, ServiceProviderContainer<T>,
ResourceContainer<T>, ClassContainer<T>, LibraryContainer<T>Core Container Operations:
Class Management:
public T addClass(Class<?> clazz)
public T addClass(String fullyQualifiedClassName)
public T addClasses(Class<?>... classes)
public T addPackage(Package pack)
public T addPackages(boolean recursive, Package... packages)Resource Management:
public T addAsResource(String resourceName)
public T addAsResource(String resourceName, String target)
public T addAsResource(Asset asset, String target)
public T addAsResource(URL resource, String target)Library Management:
public T addAsLibrary(Archive<?> archive)
public T addAsLibrary(String path)
public T addAsLibraries(Archive<?>... archives)Manifest Operations:
public T addAsManifestResource(String resourceName)
public T addAsManifestResource(Asset asset, String target)
public T setManifest(Asset asset)
public T setManifest(String manifest)Service Provider Configuration:
public T addAsServiceProvider(Class<?> serviceInterface, Class<?>... serviceImpls)
public T addAsServiceProvider(String serviceInterface, String... serviceImpls)Specialized container for web archives (WAR files) with web-specific operations.
public abstract class WebContainerBase<T extends Archive<T>> extends ContainerBase<T>
implements WebContainer<T>Web-Specific Operations:
Web Resources:
public T addAsWebResource(String resourceName)
public T addAsWebResource(Asset asset, String target)
public T addAsWebResource(URL resource, String target)Web Infrastructure:
public T addAsWebInfResource(String resourceName)
public T addAsWebInfResource(Asset asset, String target)
public T setWebXML(Asset asset)
public T setWebXML(String webXml)Container implementation for enterprise archives (EAR files) with module management.
public abstract class EnterpriseContainerBase<T extends Archive<T>> extends ContainerBase<T>
implements EnterpriseContainer<T>Enterprise Operations:
Module Management:
public T addAsModule(Archive<?> archive)
public T addAsLibrary(Archive<?> archive)
public T addAsApplicationResource(String resourceName)
public T addAsApplicationResource(Asset asset, String target)Application Configuration:
public T setApplicationXML(Asset asset)
public T setApplicationXML(String applicationXml)Container for resource adapter archives (RAR files) with JCA-specific functionality.
public abstract class ResourceAdapterContainerBase<T extends Archive<T>> extends ContainerBase<T>
implements ResourceAdapterContainer<T>Resource Adapter Operations:
public T setResourceAdapterXML(Asset asset)
public T addAsResourceAdapterResource(String resourceName)Complete memory-based archive implementation.
public class MemoryMapArchiveImpl extends MemoryMapArchiveBase<MemoryMapArchive>
implements MemoryMapArchiveConstructors:
public MemoryMapArchiveImpl(String archiveName)Configurable archive implementation with runtime customization support.
public class ConfigurableArchiveImpl extends MemoryMapArchiveBase<ConfigurableArchive>
implements ConfigurableArchiveConfiguration Methods:
public ConfigurableArchiveImpl configure(Configuration configuration)
public Configuration getConfiguration()Generic archive implementation for unknown or custom archive formats.
public class GenericArchiveImpl extends ContainerBase<GenericArchive>
implements GenericArchiveUsage:
// Create generic archive for custom formats
GenericArchiveImpl archive = new GenericArchiveImpl("custom.archive");
archive.addClass(MyClass.class);
archive.addAsResource("config.xml");All container implementations support content filtering during operations:
// Add classes with filtering
archive.addPackages(true,
Filters.exclude(TestClass.class),
"com.example.core");
// Add resources selectively
archive.addAsResource("config/",
Filters.include(".*\\.properties"));Container classes provide efficient bulk operations:
// Bulk class addition
archive.addClasses(UserService.class, OrderService.class, ProductService.class);
// Bulk library addition
archive.addAsLibraries(hibernateJar, springJar, commonsJar);
// Package scanning with recursion
archive.addPackages(true, "com.example.service", "com.example.dao");Containers support merging content from other archives:
// Merge entire archive
targetArchive.merge(sourceArchive);
// Merge with filtering
targetArchive.merge(sourceArchive, Filters.exclude(".*Test.*"));
// Merge specific paths
targetArchive.merge(sourceArchive, "/lib", "/META-INF/services");Container implementations work seamlessly with builder patterns:
JavaArchive archive = ShrinkWrap.create(JavaArchive.class, "app.jar")
.addClass(Application.class)
.addPackage("com.example.core")
.addAsResource("META-INF/persistence.xml")
.addAsManifestResource("META-INF/MANIFEST.MF");Easy service provider configuration:
// Single service implementation
archive.addAsServiceProvider(MyService.class, MyServiceImpl.class);
// Multiple implementations
archive.addAsServiceProvider(Plugin.class,
DatabasePlugin.class,
CachePlugin.class,
LoggingPlugin.class);Flexible manifest handling:
// Simple manifest setting
archive.setManifest(new StringAsset(
"Manifest-Version: 1.0\n" +
"Main-Class: com.example.Application\n"));
// Manifest from resource
archive.setManifest("META-INF/MANIFEST.MF");
// Additional manifest resources
archive.addAsManifestResource("permissions.xml")
.addAsManifestResource("beans.xml");Container implementations maintain thread safety through:
Install with Tessl CLI
npx tessl i tessl/maven-org-jboss-shrinkwrap--shrinkwrap-impl-base