Noticed quite an un-documented change in JDK7 windows command-line argument parsing reging quotes escaping and spaces:
Now execute java -cp . ArgTest "-Dfoo=""foo"" <bar>"
With Sun Oracle JDK 1.3.1_18 / 1.4.2_12 / 1.5.0_07 / 6u21 / 6u33 / 6u38:
arg0:-Dfoo="foo
arg1:<bar>
(yes I keep old JDKs around for fun)
With Oracle JDK 7u00 / 7u03 / 7u07:
arg0:-Dfoo="foo" <bar>
One can argue that it's better (and closer to unix java parsing behavior, although not yet identical), another one can argue that compatibility time is over, I'm not picking sides on this one.
Now let's watch all tooling break !
(in my case it was gerrit + gradle + jenkins)
Note:
Strangely enough, escaping quotes with '\' works for all versions (and unix as well), but some guys (read Jenkins) seem to prefer quote doubling.
Note2:
Windows argument parsing (e.g. in batch files) has the exact opposite behavior, and will split the args unless the double quoting is used.
Gluck MD
My very biased tech toughts about Java, C#, Perl & tools.
Thursday 13 December 2012
Sunday 30 January 2011
ILRepack - yet another ILMerge
In the company I work for, we use ILMerge to isolate DLL bundles in an application (bundles are developed by different teams).
What we want to share between bundles (aka contract, or API) is what is NOT merged, all other dependencies are merged into each bundle, bringing a feeling of "what you test is what is run".
ILMerge is fine, except it's closed-source, and has many issues:
- relies on COM component
- errors range from OutOfMemory to StackOverflow, all in COM parts, hard to debug
- no control over dependency resolving (only a list of search directories)
- [insert yours here]
I'm not good about commitments, and I didn't feel good with this one either, so I checked the alternatives:
- mono-merge: no longer supported, bugged, uses out-dated Cecil version
- ***fuscator pro: refusing to go commercial on this, the spec is open, so should be the tools
So I took a night shift to do this, and here it is: ILRepack
Based on renown Mono.Cecil (git trunk), it merges assemblies, and it's open source, so:
- if you don't like it, change it !
- if it doesn't work, fix it !
What we want to share between bundles (aka contract, or API) is what is NOT merged, all other dependencies are merged into each bundle, bringing a feeling of "what you test is what is run".
ILMerge is fine, except it's closed-source, and has many issues:
- relies on COM component
- errors range from OutOfMemory to StackOverflow, all in COM parts, hard to debug
- no control over dependency resolving (only a list of search directories)
- [insert yours here]
I'm not good about commitments, and I didn't feel good with this one either, so I checked the alternatives:
- mono-merge: no longer supported, bugged, uses out-dated Cecil version
- ***fuscator pro: refusing to go commercial on this, the spec is open, so should be the tools
So I took a night shift to do this, and here it is: ILRepack
Based on renown Mono.Cecil (git trunk), it merges assemblies, and it's open source, so:
- if you don't like it, change it !
- if it doesn't work, fix it !
Tuesday 12 October 2010
ILMerge is a life saver
Seriously, you need some assembly/type isolation in your .Net application framework ?
Before taking the AppDomain route (or worse, the AddIn one), check if ILMerge isn't a better approach.
Simpler and faster it is, and it sure rescued a lot of people.
Before taking the AppDomain route (or worse, the AddIn one), check if ILMerge isn't a better approach.
Simpler and faster it is, and it sure rescued a lot of people.
Subscribe to:
Posts (Atom)