I'm building a JAR from a set of scala sources. We have two physically identical win7 64 bit development machines, and recently a difference between the machines in the library jars referenced by the project caused some issues in production, so we've been looking into ways to ensure that we get the exact same build on the two machines.
The scala compiler and all external JARs are now under version control, as are the IntelliJ project files that are stored with the source code (project.iml and .idea*, except .idea\workspace.hml since it keeps track of the editor state and changes all the time). The project files have been updated to reference the now-under-version-control scala compiler (the "Libraries" and "Facets" under module settings).
We're using the same version of IntelliJ (10.5, built May 16th, 2011), and have the same Java SDK (1.6.0_24, 64 bit).
Despite synchronizing our setups to this extent we get slightly different JARs: 12 out of 1685 class files are different. Most of the differences are "small", ("offsetX$4" in one, vs "offsetX$5" in the other), b开发者_StackOverflowut some are more substantial.
IntelliJ does store some configuration information in c:\Users[username].IntelliJIdea10, but there's a lot of it and it's not immediately apparent what impact it may have on the build.
The build is repeatable on the individual machines (i.e. rebuild re-generates the same binary), but different between them.
Any thoughts on what I might be missing? Thanks!
Using any IDE for production builds is a bad idea. It's too hard to precisely control the environment. Use ant or maven or command files or anything else that doesn't have a lot of secret sauce that you're likely to accidentally stir. Sorry!
精彩评论