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]

Reply via email to