Skip to content

Fix win32 CLI build due to line length limitation in javac compilation#7074

Merged
peterkir merged 6 commits intomasterfrom
copilot/fix-bnd-build-win32
Feb 2, 2026
Merged

Fix win32 CLI build due to line length limitation in javac compilation#7074
peterkir merged 6 commits intomasterfrom
copilot/fix-bnd-build-win32

Conversation

Copy link
Contributor

Copilot AI commented Feb 1, 2026

Windows enforces an ~8191 character command line limit. Projects with many source files or long classpaths exceed this when invoking javac, causing build failures.

Changes

Modified Project.java compile flow:

  • Detect Windows and estimate javac command line length (args + overhead for spaces/quoting)
  • When exceeding 6000 chars, write arguments to temporary file
  • Invoke javac with @argfile syntax instead of direct arguments
  • Clean up temp file after compilation

Implementation details:

// Triggered on Windows when command line > 6000 chars
File argFile = createJavacArgumentFile(javac);
Command newJavac = new Command();
newJavac.add(javacExecutable);
newJavac.add("@" + argFile.getAbsolutePath());

The argument file escapes special characters per javac specification and uses UTF-8 encoding. No impact on non-Windows platforms or builds with short command lines.

Warning

Firewall rules blocked me from connecting to one or more addresses (expand for details)

I tried to connect to the following addresses, but was blocked by firewall rules:

  • bndtools.jfrog.io
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -Xms1024m -Xmx2048m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en (dns block)
  • scans-in.gradle.com
    • Triggering command: /usr/lib/jvm/temurin-17-jdk-amd64/bin/java /usr/lib/jvm/temurin-17-jdk-amd64/bin/java --add-opens=java.base/java.lang=ALL-UNNAMED --add-opens=java.base/java.lang.invoke=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.api=ALL-UNNAMED --add-exports=jdk.compiler/com.sun.tools.javac.util=ALL-UNNAMED --add-opens=java.base/java.util=ALL-UNNAMED --add-opens=java.prefs/java.util.prefs=ALL-UNNAMED --add-opens=java.base/java.nio.charset=ALL-UNNAMED --add-opens=java.base/java.net=ALL-UNNAMED --add-opens=java.base/java.util.concurrent=ALL-UNNAMED --add-opens=java.base/java.util.concurrent.atomic=ALL-UNNAMED --add-opens=java.xml/javax.xml.namespace=ALL-UNNAMED --add-opens=java.base/java.time=ALL-UNNAMED -Xms1024m -Xmx2048m -Dfile.encoding=UTF-8 -Duser.country -Duser.language=en (dns block)

If you need me to access, download, or install something from one of these locations, you can either:

Original prompt

This section details on the original issue you should resolve

<issue_title>[cli] bnd build not feasible on win32</issue_title>
<issue_description>java -jar biz.aQute.bnd-7.2.0-RC11.jar -p -d build

...
[main] DEBUG aQute.bnd.build.ProjectBuilder - ignore headers & paths Bundle-Version
[main] DEBUG aQute.bnd.build.ProjectBuilder - diffpackages {}
[main] DEBUG aQute.bnd.build.ProjectBuilder - No baseline jar null
[main] DEBUG aQute.bnd.repository.maven.provider.MavenBndRepository - Put release biz.aQute.bnd:biz.aQute.bnd.annotation:7.2.0-RC11
[main] DEBUG aQute.maven.provider.MavenRepository - Release biz.aQute.bnd:biz.aQute.bnd.annotation:7.2.0-RC11 to MavenRepository [base=C:\Users\peter\.m2\repository, id=Local, release=[], snapshot=[], localOnly=true]
[main] DEBUG aQute.libg.command.Command - executing cmd: [javac, -encoding, UTF-8, -source, 17, -target, 17, -g:vars,source,lines, -d, C:/bnd/biz.aQute.bndlib/bin, -classpath, C:/Users/peter/.m2/repository/org/osgi/osgi.annotation/8.1.0/osgi.annotation-8.1.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.dto/1.0.0/org.osgi.dto-1.0.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.resource/1.0.0/org.osgi.resource-1.0.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.framework/1.8.0/org.osgi.framework-1.8.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.util.tracker/1.5.4/org.osgi.util.tracker-1.5.4.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.namespace.contract/1.0.0/org.osgi.namespace.contract-1.0.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.namespace.extender/1.0.1/org.osgi.namespace.extender-1.0.1.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.namespace.implementation/1.0.0/org.osgi.namespace.implementation-1.0.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.namespace.service/1.0.0/org.osgi.namespace.service-1.0.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.service.log/1.3.0/org.osgi.service.log-1.3.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.service.repository/1.1.0/org.osgi.service.repository-1.1.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.util.function/1.2.0/org.osgi.util.function-1.2.0.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.util.promise/1.3.0/org.osgi.util.promise-1.3.0.jar;C:/bnd/aQute.libg/bin;C:/bnd/biz.aQute.bnd.annotation/bin;C:/bnd/biz.aQute.bnd.util/generated/biz.aQute.bnd.util.jar;C:/Users/peter/.m2/repository/org/slf4j/slf4j-api/1.7.25/slf4j-api-1.7.25.jar;C:/Users/peter/.m2/repository/org/osgi/org.osgi.service.serviceloader/1.0.0/org.osgi.service.serviceloader-1.0.0.jar;C:/bnd/cnf/cache/7.2.0/Eclipse-4_30-2023-12/org.eclipse.jdt.annotation-1.2.100.v20220826-1026.jar, -sourcepath, C:/bnd/biz.aQute.bndlib/src, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/apiguardian/api/API.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/aspectj/plugin/AspectJ.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/api/ArtifactInfo.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/api/BuildInfo.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/api/OnWorkspace.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/api/package-info.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/CircularDependencyException.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/Classpath.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/Container.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/DownloadBlocker.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/ErrorDetails.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/JUnitLauncher.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/LibraryHandler.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/LoggingProgressPlugin.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/MagicBnd.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/Makefile.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/BndEditModel.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/BndEditModelHeaderClause.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/ComponentSvcReference.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/ExportedPackage.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/HeaderClause.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/ImportPattern.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/ServiceComponent.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/clauses/VersionedClause.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/conversions/CapabilityFormatter.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/conversions/CapReqFormatter.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/conversions/CollectionFormatter.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/conversions/Converter.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/conversions/DefaultBooleanFormatter.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/conversions/DefaultFormatter.java, C:/bnd/biz.aQute.bndlib/src/aQute/bnd/build/model/conversions/EEConverter.java, C:/bnd/...

</details>



<!-- START COPILOT CODING AGENT SUFFIX -->

- Fixes bndtools/bnd#6996

<!-- START COPILOT CODING AGENT TIPS -->
---

✨ Let Copilot coding agent [set things up for you](https://github.com/bndtools/bnd/issues/new?title=✨+Set+up+Copilot+instructions&body=Configure%20instructions%20for%20this%20repository%20as%20documented%20in%20%5BBest%20practices%20for%20Copilot%20coding%20agent%20in%20your%20repository%5D%28https://gh.io/copilot-coding-agent-tips%29%2E%0A%0A%3COnboard%20this%20repo%3E&assignees=copilot) — coding agent works faster and does higher quality work when set up for your repo.

Copilot AI and others added 3 commits February 1, 2026 15:06
Co-authored-by: peterkir <250545+peterkir@users.noreply.github.com>
Co-authored-by: peterkir <250545+peterkir@users.noreply.github.com>
…uoting

Co-authored-by: peterkir <250545+peterkir@users.noreply.github.com>
Copilot AI changed the title [WIP] Fix bnd build not feasible on win32 Fix Windows command line length limitation in javac compilation Feb 1, 2026
Copilot AI requested a review from peterkir February 1, 2026 15:14
@peterkir peterkir marked this pull request as ready for review February 2, 2026 08:01
@peterkir peterkir changed the title Fix Windows command line length limitation in javac compilation Fix win32 CLI build due to line length limitation in javac compilation Feb 2, 2026
@peterkir peterkir merged commit b38f911 into master Feb 2, 2026
13 checks passed
@peterkir peterkir deleted the copilot/fix-bnd-build-win32 branch February 2, 2026 08:35
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment

Labels

None yet

Projects

None yet

Development

Successfully merging this pull request may close these issues.

2 participants