Status: Resolved (View Workflow)
Remoting 3.32, jenkins-2.182
After an attempted upgrade of args4j in jenkinsci/swarm-plugin#120, the following exception was thrown:
java.lang.IllegalStateException: Cannot set value to a final field 'hudson.remoting.jnlp.Main.urls'. at org.kohsuke.args4j.spi.Setters.create(Setters.java:32) at org.kohsuke.args4j.ClassParser.parse(ClassParser.java:34) at org.kohsuke.args4j.CmdLineParser.<init>(CmdLineParser.java:96) at org.kohsuke.args4j.CmdLineParser.<init>(CmdLineParser.java:71) at hudson.remoting.jnlp.Main._main(Main.java:215) at hudson.remoting.jnlp.Main.main(Main.java:188) at hudson.plugins.swarm.SwarmClient.connect(SwarmClient.java:325) at hudson.plugins.swarm.Client.run(Client.java:193) at hudson.plugins.swarm.Client.main(Client.java:130)
As of args4j 2.32, "final fields can no longer be set." If an args4j field is marked with the final keyword, an IllegalStateException is thrown.
Remove the final keyword from the fields that we expect args4j to set.
Implemented in jenkinsci/remoting#326. See the PR for testing done.
Once this change is merged and released, we can proceed with updating args4j in Jenkins core, which also involves updating the args4j dependency in Remoting. I'm explicitly postponing that work to a future PR, since at the present time Jenkins core is not using the latest version of Remoting due to a Remoting bug (see jenkinsci/jenkins#4047).
The Swarm side was merged in jenkinsci/swarm-plugin#120 and jenkinsci/swarm-plugin#135. All integration tests passing and should be released eventually in Swarm 3.18.
The Remoting side of this change was released in version 3.33 of Remoting, where it upgraded to args4j version 2.33.