Common base implementations for the ShrinkWrap project enabling declarative assembly of Java archives (JAR, WAR, EAR, RAR) in code
—
Archive specification implementations provide concrete implementations for standard Java archive formats (JAR, WAR, EAR, RAR) with full compliance to their respective specifications.
Complete implementation of Java Archive (JAR) format with standard JAR functionality.
public class JavaArchiveImpl extends ContainerBase<JavaArchive> implements JavaArchiveConstructors:
public JavaArchiveImpl(String archiveName)Key Features:
Usage Example:
JavaArchiveImpl jar = new JavaArchiveImpl("application.jar");
jar.addClass(Application.class)
.addPackage("com.example.core")
.addAsResource("config.properties")
.setManifest("META-INF/MANIFEST.MF");Complete implementation of Web Archive (WAR) format for web applications.
public class WebArchiveImpl extends WebContainerBase<WebArchive> implements WebArchiveConstructors:
public WebArchiveImpl(String archiveName)Web-Specific Structure:
/WEB-INF/web.xml - Web application descriptor/WEB-INF/classes/ - Web application classes/WEB-INF/lib/ - Web application librariesUsage Example:
WebArchiveImpl war = new WebArchiveImpl("webapp.war");
war.addClass(ServletClass.class)
.addAsWebResource("index.html")
.addAsWebResource("css/style.css", "css/style.css")
.setWebXML("WEB-INF/web.xml")
.addAsLibrary(dependencyJar);Complete implementation of Enterprise Archive (EAR) format for enterprise applications.
public class EnterpriseArchiveImpl extends EnterpriseContainerBase<EnterpriseArchive>
implements EnterpriseArchiveConstructors:
public EnterpriseArchiveImpl(String archiveName)Enterprise Structure:
META-INF/application.xml - Application descriptor/lib/ - Shared librariesUsage Example:
EnterpriseArchiveImpl ear = new EnterpriseArchiveImpl("enterprise.ear");
ear.addAsModule(webModule)
.addAsModule(ejbModule)
.addAsLibrary(sharedLibrary)
.setApplicationXML("META-INF/application.xml");Complete implementation of Resource Adapter Archive (RAR) format for JCA connectors.
public class ResourceAdapterArchiveImpl extends ResourceAdapterContainerBase<ResourceAdapterArchive>
implements ResourceAdapterArchiveConstructors:
public ResourceAdapterArchiveImpl(String archiveName)RAR Structure:
META-INF/ra.xml - Resource adapter descriptorUsage Example:
ResourceAdapterArchiveImpl rar = new ResourceAdapterArchiveImpl("connector.rar");
rar.addClass(ResourceAdapterImpl.class)
.addClass(ConnectionFactoryImpl.class)
.setResourceAdapterXML("META-INF/ra.xml");JavaArchiveImpl follows JAR File Specification:
WebArchiveImpl adheres to Servlet Specification:
EnterpriseArchiveImpl follows Java EE Specification:
ResourceAdapterArchiveImpl implements JCA Specification:
The specification implementations include automatic type detection:
// Automatic format detection based on extension and content
Archive<?> archive = ArchiveFactory.create("application.war");
// Returns WebArchiveImpl instance
// Explicit type specification
JavaArchive jar = ArchiveFactory.create(JavaArchive.class, "app.jar");
// Returns JavaArchiveImpl instanceEach specification implementation includes validation capabilities:
// Validate archive structure
ValidationResult result = archive.validate();
if (!result.isValid()) {
for (ValidationError error : result.getErrors()) {
System.err.println("Validation error: " + error.getMessage());
}
}Specification implementations provide metadata access:
// JAR-specific metadata
String mainClass = jar.getManifest().getMainAttributes().getValue("Main-Class");
// WAR-specific metadata
String displayName = war.getWebXml().getDisplayName();
// EAR-specific metadata
List<Module> modules = ear.getApplicationXml().getModules();META-INF/
MANIFEST.MF
services/
com.example.Service
com/
example/
Application.class
config.propertiesWEB-INF/
web.xml
classes/
com/example/ServletClass.class
lib/
dependency.jar
META-INF/
MANIFEST.MF
index.html
css/
style.cssMETA-INF/
application.xml
MANIFEST.MF
lib/
shared-library.jar
webapp.war
ejb-module.jar
connector.rarMETA-INF/
ra.xml
MANIFEST.MF
com/
example/
ResourceAdapterImpl.class
ConnectionFactoryImpl.classThe specification implementations integrate seamlessly with the broader ShrinkWrap API:
// Create using ShrinkWrap factory
JavaArchive jar = ShrinkWrap.create(JavaArchive.class, "app.jar");
// Convert between types
WebArchive war = jar.as(WebArchive.class);
// Export to different formats
File jarFile = jar.as(ZipExporter.class).exportToFile("app.jar");The base classes support creating custom specifications:
public class CustomArchiveImpl extends ContainerBase<CustomArchive>
implements CustomArchive {
public CustomArchiveImpl(String archiveName) {
super(archiveName, CustomArchive.class);
}
// Custom specification-specific methods
public CustomArchive setCustomDescriptor(Asset descriptor) {
return add(descriptor, new BasicPath("/META-INF/custom.xml"));
}
}Install with Tessl CLI
npx tessl i tessl/maven-org-jboss-shrinkwrap--shrinkwrap-impl-base