Java 放置自动生成代码的好地方?
我们有一堆自动生成的类,其中大部分是Axis2存根、骨架等。对于一些复杂的WSDL,Axis2生成了大量java bean、存根等。我确信使用自动生成时也有其他情况 目前,我们将它们视为代码库的其他第一类成员,它们存储在相同的包中 然而,在执行重构、清理等操作时,很难消除来自这些自动生成类的警告。例如,如果我试图清理代码以便使用Java1.5泛型,那么没有好的方法可以知道这些有问题的类中有多少是我们的,而不是自动生成的 我应该将这些自动生成的部件分离到不同的包中吗?你们如何将这些工件存储在存储库中 编辑: 我在下面的许多答案中看到了“在构建过程中生成”。虽然我看到了这样做的好处,但我不太明白如何摆脱存储库签入Java 放置自动生成代码的好地方?,java,code-generation,axis2,axis,Java,Code Generation,Axis2,Axis,我们有一堆自动生成的类,其中大部分是Axis2存根、骨架等。对于一些复杂的WSDL,Axis2生成了大量java bean、存根等。我确信使用自动生成时也有其他情况 目前,我们将它们视为代码库的其他第一类成员,它们存储在相同的包中 然而,在执行重构、清理等操作时,很难消除来自这些自动生成类的警告。例如,如果我试图清理代码以便使用Java1.5泛型,那么没有好的方法可以知道这些有问题的类中有多少是我们的,而不是自动生成的 我应该将这些自动生成的部件分离到不同的包中吗?你们如何将这些工件存储在存储库
我的代码对其中一些类具有编译时依赖性,对我来说,开发期间的构建是eclipse中的“ctrl-s”。我们使用ant脚本来生成编译、运行测试和生成可交付成果。我将这些文件放入了它们自己的项目中。这样,我可以在一个地方添加构建文件、我需要的所有补丁等,并关闭生成代码的所有警告。对于生成的每一组工件,创建一个执行生成的新项目,然后将工件捆绑到JAR和源ZIP文件中,然后从应用程序中引用它们。保持事物的良好性和独立性,并强调生成的工件不可由IDE更改的事实。如果要将它们检查到源代码管理系统中,请不要这样做。让它们通过构建步骤重新生成。如果它们是从WSDL生成的,请检入WSDL,而不是结果代码 我建议让构建步骤为生成的代码生成一个完全独立的.jar,然后删除源文件,以尽可能避免维护人员手动编辑自动生成的源代码
这样,重构活动会将自动生成的代码视为第三方库,而不是要处理的源代码。您可以保留相同的包,但使用不同的源代码文件夹(类似于生成的src),这就是我们所做的。事实上,我对将生成的代码保存在源代码存储库中的整个想法持怀疑态度。我们这样做是为了方便项目中的其他开发人员,但是在构建过程中重新生成源代码通常是有意义的。如果生成的代码不太可能更改,那么使用单独的项目并生成jar可能更实用。使用maven和axistools maven插件,生成的源代码放在“target”目录中的不同源文件夹中。此目标目录是maven生成所有文件和内容的地方,因此可以对其进行清理。
这非常方便,因为生成的文件也显示在IDE中的另一个源文件夹中。最佳实践摘要:
- 让它重复
- 作为构建过程的一部分创建生成的代码
- 不要将生成的代码签入源代码管理。(请签入源代码,例如WSDL)
- 将生成的代码与托管代码分开
- 为生成的输出使用不同的源文件夹
- 交付一个单独的.jar,以便生成的代码成为依赖项
- 考虑使用不同的IDE项目(或maven模块)