Hi, I think I have working copy.
Any comments are welcome.A bit unsure of the dep exclusions...
build.gradle---import
com.github.jengelman.gradle.plugins.shadow.transformers.AppendingTransf
ormer
import
com.github.jengelman.gradle.plugins.shadow.transformers.ServiceFileTran
sformer
import
com.github.jengelman.gradle.plugins.shadow.transformers.TransformerCont
ext
import
com.github.jengelman.gradle.plugins.shadow.transformers.Transformer
import
com.github.jengelman.gradle.plugins.shadow.transformers.Log4j2PluginsCa
cheFileTransformer
import shadow.org.apache.tools.zip.ZipEntry
import shadow.org.apache.tools.zip.ZipOutputStream
class OpenWebBeansPropertiesTransformer implements Transformer {
String resource
private final List<Properties> configurations = new ArrayList<>()
private String ordinalKey = "configuration.ordinal"
private int defaultOrdinal = 100
private boolean reverseOrder
@Override
boolean canTransformResource(FileTreeElement element) {
def path = element.relativePath.pathString
if (resource != null && resource.equalsIgnoreCase(path)) {
return true
}
return false
}
@Override
void transform(TransformerContext context) {
Properties p = new Properties()
p.load(context.is)
configurations.add(p);
}
@Override
boolean hasTransformedResource() {
return !configurations.isEmpty()
}
void modifyOutputStream(ZipOutputStream jos, boolean
preserveFileTimestamps) {
Properties out =
mergeProperties(sortProperties(configurations))
jos.putNextEntry(new ZipEntry(resource))
out.store(jos, "# maven " + resource + " merge")
jos.closeEntry()
}
private List<Properties> sortProperties(List<Properties>
allProperties) {
List<Properties> sortedProperties = new ArrayList<>()
for (Properties p : allProperties) {
int configOrder = getConfigurationOrdinal(p)
int i;
for (i = 0; i < sortedProperties.size(); i++) {
int listConfigOrder =
getConfigurationOrdinal(sortedProperties.get(i));
if ((!reverseOrder && listConfigOrder > configOrder) ||
(reverseOrder && listConfigOrder < configOrder)) {
break;
}
}
sortedProperties.add(i, p)
}
return sortedProperties;
}
private int getConfigurationOrdinal(Properties p) {
String configOrderString = p.getProperty(ordinalKey)
if (configOrderString != null && configOrderString.length() >
0) {
return Integer.parseInt(configOrderString)
}
return defaultOrdinal
}
private static Properties mergeProperties(List<Properties>
sortedProperties) {
Properties mergedProperties = new Properties();
for (Properties p : sortedProperties) {
mergedProperties.putAll(p)
}
return mergedProperties;
}
}
plugins {
id 'java'
id 'com.github.johnrengelman.shadow' version '5.0.0'
id 'io.freefair.lombok' version '3.6.6'
id 'project-report'
}
group 'org.waastad'
version '1.0-SNAPSHOT'
sourceCompatibility = 1.8
repositories {
mavenCentral()
}
jar {
manifest {
attributes 'Main-Class': 'org.apache.meecrowave.runner.Cli'
}
}
shadowJar {
mergeServiceFiles()
transform(AppendingTransformer) {
resource = 'META-INF/cxf/bus-extensions.txt'
}
transform(AppendingTransformer) {
resource = 'log4j2.component.properties'
}
transform(Log4j2PluginsCacheFileTransformer)
transform(OpenWebBeansPropertiesTransformer) {
resource = 'META-INF/openwebbeans/openwebbeans.properties'
}
transform(ServiceFileTransformer)
}
dependencies {
compile('org.apache.meecrowave:meecrowave-core:1.2.8') {
exclude group: 'org.glassfish.jaxb'
exclude group: 'jakarta.xml.bind'
exclude group: 'org.jvnet.staxex'
exclude group: 'org.codehaus.woodstox'
exclude group: 'com.fasterxml.woodstox'
exclude group: 'jakarta.ws.rs'
exclude group: 'javax.annotation'
exclude group: 'org.apache.ws.xmlschema'
}
compile 'commons-cli:commons-cli:1.4'
testCompile group: 'junit', name: 'junit', version: '4.12'
}
---
on., 05.06.2019 kl. 22.32 +0200, skrev Romain Manni-Bucau:
> Did you port the excludes as well?
> Btw if you want to PR the doc on the website to add it would be
> welcomed ;)
> Le mer. 5 juin 2019 à 22:20, Helge Waastad <[email protected]> a
> écrit :
> > Just an update.
> > I needed to implement the OpenWebBeansPropertiesTransformerin my
> > gradle build.
> > It's working now, but it seems to be some work left to trim down
> > the jar. Currently I'm ~4M larger than the maven version.
> > /hw
> > on., 05.06.2019 kl. 10.50 +0200, skrev Romain Manni-Bucau:
> > > Hi Helge,
> > > Meecrowave supports shadowing but as explained on the maven page
> > > documenting how to do a fat jar with shade plugin (no need to
> > > build a capsule ;)) -
> > > http://openwebbeans.apache.org/meecrowave/meecrowave-maven/index.html
> > > (the end) - it requires to use custom transformers for cxf,
> > > openwebbeans, log4j2 (until you exclude it) etc...
> > >
> > > If you do the same with shadowing plugin - transformers API was
> > > copied from shade plugin so it should be trivial to port them
> > > over - then the shadowing will work.
> > >
> > > Romain Manni-Bucau
> > > @rmannibucau | Blog | Old Blog | Github | LinkedIn | Book
> > >
> > > Le mer. 5 juin 2019 à 10:48, Helge Waastad <[email protected]> a
> > > écrit :
> > > > Hi,
> > > > I've been running meecrowave and maven (and capsule-maven-
> > > > plugin) to make a fat jar.
> > > >
> > > > However in my quest to use Gradle I'm struggling to get
> > > > shadowing working for Meecrowave.
> > > >
> > > > running jar:
> > > > Caused by: java.lang.NullPointerException
> > > > at
> > > > org.apache.meecrowave.tomcat.MeecrowaveContextConfig.webConfig(
> > > > MeecrowaveContextConfig.java:111)
> > > > at
> > > > org.apache.catalina.startup.ContextConfig.configureStart(Contex
> > > > tConfig.java:768)
> > > > at
> > > > org.apache.catalina.startup.ContextConfig.lifecycleEvent(Contex
> > > > tConfig.java:301)
> > > > at
> > > > org.apache.meecrowave.tomcat.MeecrowaveContextConfig.lifecycleE
> > > > vent(MeecrowaveContextConfig.java:165)
> > > > at
> > > > org.apache.catalina.util.LifecycleBase.fireLifecycleEvent(Lifec
> > > > ycleBase.java:123)
> > > > at
> > > > org.apache.catalina.core.StandardContext.startInternal(Standard
> > > > Context.java:5034)
> > > > at
> > > > org.apache.catalina.util.LifecycleBase.start(LifecycleBase.java
> > > > :183)
> > > >
> > > >
> > > > Does anyone have an example for a gradle build and Meecrowave?
> > > >
> > > > /hw
> > > >
> > > >
> > > >
> > > > --
> > > > Helge Waastad
> > > > - The Undelstad Cup Champion 2017