java - files from different maven-modules with the same name can not co-exist in a jar-file created with the maven assembly-plugin -
if there two files different content same name in two different maven-modules, wich both put in 1 jar-file maven assembly-plugin, one file ends being part of .jar file.
question: there way ensure content of files assembled 1 file when building jar-file?
i not want put information manually, since trying avoid splitting project in different modules.
edit: have custom assembly-descriptor keep, if start using plugin. descriptor excludes every language english 1 resources , error-texts.
<id>jar-with-dependencies</id> <formats> <format>jar</format> </formats> <includebasedirectory>false</includebasedirectory> <dependencysets> <dependencyset> <outputdirectory>/</outputdirectory> <useprojectartifact>true</useprojectartifact> <unpack>true</unpack> <scope>runtime</scope> <unpackoptions> <excludes> <exclude>**/*resources_*</exclude> <exclude>**/*errorstext_*</exclude> </excludes> </unpackoptions> </dependencyset> </dependencysets>
as specified maven-assembly-plugin
documentation:
if project wants package artifact in uber-jar, assembly plugin provides basic support. more control, use maven shade plugin.
using maven-shade-plugin
can have fat jar (like using assembly plugin) , solve similar issues of merging file using resources transformers. in case, appendingtransformer
merge files same name different content.
some jars contain additional resources (such properties files) have same file name. avoid overwriting, can opt merge them appending content 1 file.
a simple configuration like:
<build> <plugins> <plugin> <groupid>org.apache.maven.plugins</groupid> <artifactid>maven-shade-plugin</artifactid> <version>2.4.3</version> <executions> <execution> <phase>package</phase> <goals> <goal>shade</goal> </goals> <configuration> <transformers> <transformer implementation="org.apache.maven.plugins.shade.resource.appendingtransformer"> <resource>path/to/file/file-name-here</resource> </transformer> </transformers> </configuration> </execution> </executions> </plugin> </plugins> </build>
update
don't need external assembly descriptor shade plugin, can configure requirements directly plugin configuration.
in case, exclude resources assembled jars, can use shade filters.
a simple configuration (to merged 1 above) like:
<configuration> <filters> <filter> <artifact>*:*</artifact> <excludes> <exclude>**/*resources_*</exclude> <exclude>**/*errorstext_*</exclude> </excludes> </filter> </filters> </configuration>
Comments
Post a Comment