GroupDocs.Assembly for Java 26.8 Release Notes

Full list of changes in this release

IDSummaryCategory
ASSEMBLYJAVAProject converted from IntelliJ IDEA modules + ANT release script to a single Maven project with the shade → jarjar → proguard pipelineUpdate
ASSEMBLYJAVAProduct sources moved to the standard Maven layout: GroupDocs.Assembly, Aspose.{Words,Cells,Slides,Text}.Assembly, Aspose.Foundation.Extensions, Dynabic.Metered, MS.Patched → src/main/java (209 files)Update
ASSEMBLYJAVAShared sources vendored to res/f/src/main/java: Aspose.Foundation, Aspose.Reporting, MS layer (com.aspose.ms, com.aspose.words.net.System.*, WindowsNativeCall), shared Dynabic.Metered (2007 files)Update
ASSEMBLYJAVALicensing resources → src/main/resources/com/groupdocs/assembly; CultureInfo.xmlsrc/main/resources/com/aspose/words/resources (former MS.Patched resource root)Update
ASSEMBLYJAVApom.xml with profiles development / final / release / javadoc / test / test-obfuscated / sonar / deploy-groupdocs-qa / deploy-groupdocsFeature
ASSEMBLYJAVAPackage renaming: the two-pass ProGuard mapping trick replaced by JARJAR (21 rules; config/groupdocs-assembly.rules mirrors the pom)Update
ASSEMBLYJAVAPublic .NET analogue API preserved: com.aspose.words.net.System[.Data[.Common]]com.groupdocs.assembly.system[.data[.common]]; System.Globalization moved to internalFix
ASSEMBLYJAVArearrangeJarResources post-processing dropped — JARJAR rewrites resource path literals (/com/aspose/email/tz.dat → internal path)Update
ASSEMBLYJAVAAspose.Words patched-JAR step dropped (UpdateAsposeWordsClasses.bat, Aspose.Words.Classes): shade excludes com/aspose/words/net/** of the artifactUpdate
ASSEMBLYJAVAAspose.Words transitives excluded: -javadoc, -shaping-harfbuzz-plugin, jogl/gluegen natives (~200 MB)Fix
ASSEMBLYJAVAThird-party JARs that are not published (patched bc-fips, Woodstox, PngEncoder, JAI, im4java) moved to the project-local repository ./dependenciesUpdate
ASSEMBLYJAVAJAI and im4java declared provided — compiled against, not merged into the result JARUpdate
ASSEMBLYJAVAManifest produced by maven-jar-plugin manifestEntries (replaces the ManifestGenerator run of the ANT build)Update
ASSEMBLYJAVAProGuard configuration ported to config/groupdocs-assembly.pro; optimization disabledUpdate
ASSEMBLYJAVAProGuard keep rules use single-level wildcards, otherwise everything JARJAR moved under com.groupdocs.assembly.internal stays unobfuscatedFix
ASSEMBLYJAVAProGuard -adaptclassstrings com.groupdocs.assembly.internal.**: Aspose components load internal classes by name and ProGuard 7 does not adapt such string constantsFix
ASSEMBLYJAVAProGuard keeps methods annotated with the renamed engine annotations @com.groupdocs.assembly.internal.** — otherwise CustomTypeMemberBinderBuilderImpl fails in its static initializerFix
ASSEMBLYJAVAProGuard -keepnames class com.groupdocs.assembly.internal.c.a.w.internal.**: Aspose.Words links its internal MS-layer copy against the net.System wrappers built from sourcesFix
ASSEMBLYJAVAManifestGenerator excluded from the public API by the ProGuard keep rule and from the API referenceUpdate
ASSEMBLYJAVADistribution ZIP built by maven-assembly-plugin (config/assembly.xml): lib/JAR + install.bat/sh with the substituted version, doc/javadoc JAR + doc/API, licenses, readmeUpdate
ASSEMBLYJAVAsimplified-pom.xml published instead of the build pom; deploy profiles for the QA and production S3 repositoriesUpdate
ASSEMBLYJAVACompiler level unified to 1.8 (was 1.7 for the product and 1.8 for the tests)Update
ASSEMBLYJAVATests moved: Aspose.TestBase, GroupDocs.Assembly.Tests, Aspose.*.Assembly.Tests, GroupDocs.Assembly.SampleTests → src/test/java (58 files)Test
ASSEMBLYJAVAShared test infrastructure to res/f/src/test/java: Aspose.TestFx and the com.aspose.ms.NUnit.Framework shim (70 files)Test
ASSEMBLYJAVASample test documents → src/test/resources/com/groupdocs/assembly/sampletests/TestData (121 files)Test
ASSEMBLYJAVAxmlunit:xmlunit:1.2 test dependency added for com.aspose.XmlComparer of Aspose.TestFxTest
ASSEMBLYJAVAsurefire/failsafe include Test*, **Test, **Tests and exclude the test infrastructure (com/aspose/Test*, com/aspose/testbase/**, com/aspose/ms/NUnit/**) that holds no testsTest
ASSEMBLYJAVAtestng.xml suite added for the test-obfuscated profile (tests against the obfuscated JAR, the analogue of the ANT test.project target)Test
ASSEMBLYJAVAObfuscated JAR verified against the JAR of the old ANT build: DOCX/XLSX produce output of the same size, EML/MSG/PPTX produce identical messagesTest
ASSEMBLYJAVArun_tests: unit tests skipped with -Dqa.skip.junit=true until TestData/TestGold/TestGoldJava are available on the runnerUpdate
ASSEMBLYJAVArun_tests: the -D option quoted — PowerShell 5.1 splits -Dqa.skip.junit=true into -Dqa + .skip.junit=true and Maven fails with “Unknown lifecycle phase”Fix
ASSEMBLYJAVA.gitlab-ci.yml: dev/test/stage/prod/cleanup pipeline (Sonar, security report, QA and prod deploy, API references, build dir cleanup)Update
ASSEMBLYJAVAbuild.cake: Sonar keys and exclusions for assembly, security report, GitHub API references, CleanupBuildDir; the UpdateBlackLists task dropped (blacklists are generated into the sources)Update
ASSEMBLYJAVAbuild.cake SecurityReport: warn instead of failing the pipeline when the tool produced no report for the projectFix
ASSEMBLYJAVAjavadoc profile (HugoDoclet): -overview is no longer passed — the flag is added by maven-javadoc-plugin outside the standard doclet options and the doclet rejects itFix
ASSEMBLYJAVAjavadoc: <subpackages> replaced with <sourceFileIncludes> — with -subpackages the javadoc tool of JDK 9+ dies with java.lang.AssertionError in com.sun.tools.javac.comp.Modules.allModulesFix
ASSEMBLYJAVAjavadoc: overview page taken from res/javadoc/javadoc.overview.html for the standard doclet buildsUpdate
ASSEMBLYJAVAREADME rewritten: build description, mapping of the old modules onto the new layout, JARJAR/ProGuard specifics, test data and license requirementsUpdate
ASSEMBLYJAVAres/f/README.md added: origin of every shared source subtree and how to update itUpdate
ASSEMBLYJAVAVersion bumped to 26.8 (pom, simplified-pom, AssemblyConstants.VERSION/RELEASE_DATE)Update

New project layout

The product is now one Maven module. src/main/java holds the product itself, src/test/java the tests, and res/f the sources shared with other Aspose products (Aspose.Foundation, Aspose.Reporting, the MS layer, Dynabic.Metered and, for tests, Aspose.TestFx with the NUnit shim); they are attached with build-helper-maven-plugin and are documented in res/f/README.md. Build configuration lives in config (JARJAR rules, ProGuard configuration, assembly descriptors, install script templates), redistributable files in res/distribution, non-public third-party JARs in dependencies.

Package renaming: JARJAR instead of the double ProGuard pass

The ANT build ran ProGuard twice — the first pass collected the class name mapping, the mapping was rewritten so that everything outside com.groupdocs.assembly moved under com.groupdocs.assembly.internal, and the second pass applied it. The same result is now produced by JARJAR rules, and ProGuard only obfuscates names. As a side effect the rearrangeJarResources tool is no longer needed: JARJAR moves resources together with their package and rewrites resource path literals inside the class files.

ProGuard specifics that the new pipeline requires

Because renaming now happens before ProGuard, three things had to be adjusted: keep rules must use single-level wildcards (com.groupdocs.assembly.*, not **), string constants holding class names must be adapted (-adaptclassstrings), and the keep rule for reflectively called methods must reference the renamed annotations (@com.groupdocs.assembly.internal.**, since @**aspose** no longer matches anything). In addition, the names of com.groupdocs.assembly.internal.c.a.w.internal.** are preserved: Aspose.Words links its own internal copy of the MS layer against the com.aspose.words.net.System.* wrappers that this project builds from sources, and ProGuard leaves the old class names inside the descriptors of references it cannot resolve.

Aspose.Words without the patched JAR

com.aspose.words.net.System.* is still built from sources, because the classes shipped in the Aspose.Words JAR are obfuscated and miss members used by GroupDocs.Assembly, for example DataSet.readXml(Stream). Instead of un-JARring and patching the artifact, maven-shade-plugin now excludes com/aspose/words/net/** from it, so UpdateAsposeWordsClasses.bat and the Aspose.Words.Classes folder are gone.

Distribution package and manifest

mvn clean install -Prelease (or -Pfinal -Dfinal.skip.packaging=false) produces target/GroupDocs.Assembly_<version>-Java.zip with lib/groupdocs-assembly-<version>.jar, version-substituted lib/install.bat and lib/install.sh, doc/groupdocs-assembly-<version>-javadoc.jar, doc/API, the license agreements and the readme. The ZIP is not attached to the Maven artifacts and is not uploaded by the pipeline (the deploy jobs run -Pfinal without -Dfinal.skip.packaging=false), so publishing it stays a manual step, as it was with the ANT build. Note that the archive is named GroupDocs.Assembly_<version>-Java.zip and unpacks into a GroupDocs.Assembly_<version> folder, while the ANT build produced groupdocs-assembly-<version>-java.zip with lib, doc and license at the root. The JAR manifest (Specification/Implementation, OSGi Bundle-*, Permissions, Codebase, Export-Package) is produced by maven-jar-plugin, so the build no longer runs ManifestGenerator.

Tests and test data

GOLD tests locate their documents by walking up from target/test-classes for a directory that contains both TestData and TestGold (TestGold paths are then replaced with TestGoldJava when a Java specific GOLD file exists). Those folders total 232 MB and are not part of the repository, so the run_tests job currently runs with -Dqa.skip.junit=true and Sonar analysis without coverage; drop the flag once the folders are provided on the runner. Tests also need real .lic files (Aspose.Total Product Family.lic next to TestData, and the GroupDocs.Assembly licenses inside TestData).

API reference

mvn initialize -Pjavadoc generates the Hugo reference for the website; the final and release profiles build the javadoc JAR with the standard doclet and the overview page from res/javadoc. Note that the reference is generated from the sources of the com.groupdocs.assembly tree, which carry .NET style /// comments, so it currently contains signatures without descriptions — the ANT build fed javadoc with intermediate sources produced by the .NET CommentPorter tooling, which is not a part of this project. For the same reason the public .NET analogue types (com.groupdocs.assembly.system.data and friends) are not covered: they only get that name from JARJAR at build time.