Karl, I'd like to embed Maven version string comparison in my JAR so my users don't have to install both Maven and Commons-Lang. But I'd like to do this in a way that my JAR isn't an order-of-magnitude bigger.
I've found I can embed just org.apache.maven.artifact org.apache.maven.artifact.handler org.apache.maven.artifact.metadata org.apache.maven.artifact.repository org.apache.maven.artifact.repository.layout org.apache.maven.artifact.repository.metadata org.apache.maven.artifact.resolver org.apache.maven.artifact.resolver.filter org.apache.maven.artifact.versioning org.apache.maven.repository org.apache.maven.repository.legacy.metadata as long as I make the small mods I posted to remove the Commons-Lang dependency. Should I keep these mods as a custom fork, or would they be a worthwhile patch to the distribution? Mark On 26/11/2019 05:01, Karl Heinz Marbaise wrote: > Hi Mark, > > can you tell us on which part of Maven you are referencing? Or do you > reference your own project? > > Maven Core ? a particular plugin ? > > Kind regards > Karl Heinz Marbaise > > On 25.11.19 03:08, Mark James wrote: >> Hello, >> >> Is there any chance of removing the dependency of Artifact on Commons-Lang? >> Something nine times bigger is pulled in just to reference the String utility >> functions isNotEmpty, notBlank, and isNumeric. >> >> I understand the advantages of libraries, but this comes at more of a cost in >> Java because common Java libraries are less likely to be on the system than >> native libraries, and so must be either specified as a dependency (that must >> be >> downloaded and added to build and class paths), distributed with the using >> JAR >> (requiring an installation expansion), or embedded into using JARs (defeating >> the space-saving advantage). Semi-automated dependency resolution probably >> makes >> this easier, but many such as myself aren't familiar with it. >> >> I'd like to be able to distribute my package as a single JAR, with Artifact >> but >> not Commons-Lang embedded. But this currently needs the following changes: >> >> 1. Replacing StringUtils.isNotEmpty in DefaultArtifact with a not-null + >> positive-length test. >> >> 2. In ArtifactUtils.notBlank, replacing >> >> Validate.notBlank( str, message ); >> >> with >> >> for (int i=0; i < str.length(); i++) if >> (!Character.isWhitespace(str.charAt(i))) return; >> throw new IllegalArgumentException(message); >> >> or, using Java 8 code, >> >> if (str.chars().allMatch(Character::isWhitespace)) throw new >> IllegalArgumentException(message); >> >> and 3. Copying StringUtils.isNumeric as DefaultArtifact.isDigits. >> >> It would be nice if Java had a directive to do such copies at build-time, >> removing run-time dependencies while preventing code duplication. --------------------------------------------------------------------- To unsubscribe, e-mail: [email protected] For additional commands, e-mail: [email protected]
