我慢慢开始明白常春藤世界中模块配置的重要性。但是,我仍然很难清楚地看到相同的代码块如何具有不同的依赖性要求的配置(一个例外是测试配置,需要JUnit在正常依赖 - 我实际上理解为100%!)
例如,请使用以下代码:
package org.myorg.myprogram.core;
// Import an object from a dependency
import org.someElse.theirJAR.Widget;
public class MyCode
{
public MyCode()
{
if(Widget.SOME_STATIC == 3)
System.out.println("Fizz");
else
System.out.println("Buzz");
}
}
现在,除了这是可怕的代码之外,我只是看不出我的程序(让我们假装JARred到MyProgram.jar中)可以设置为多个“构“;其中一些可能需要theirJAR
及其Widget
类,而另一些则不需要。 对我而言,如果我们无法向MyCode
提供Widget
,它将在运行时死亡,
同样,我理解测试配置的必要性;只是没有别的(我也问过关于编译与运行时依赖关系的问题,我想我也看到了这些问题的必要性)。但是除了测试配置,编译时配置和运行时配置之外,您可能还需要哪些其他模块配置?在某些情况下,MyCode如何需要一个Widget,而在其他情况下,如果没有Widget,它仍然可以完美运行?
我非常感谢任何帮助包围我的大脑!
答案 0 :(得分:2)
Hibernate就是一个很好的例子。 Hibernate支持多个缓存实现作为其二级缓存。您不希望过渡依赖于所有可能的缓存,只需要使用您使用的缓存。
通常,我们使用典型的编译,测试和运行时配置集。
答案 1 :(得分:1)
要添加到SteveD的答案,请记住依赖项不仅仅是.jar文件。一些依赖项包含源和javadoc文件,发行说明,许可证文件等。依赖项的多个配置可能允许您选择要解析的文件子集。
答案 2 :(得分:1)
您可能还希望使用配置来控制不同发行版的内容。例如,您可能希望自己发布jar(Maven用语中的“master”配置),另外还要构建一个包含所有运行时依赖项的tar包,包含(或不包含)源代码。
配置的另一个用途是当您定位多个平台时。我经常发布打包为独立jar或tomcat web应用程序运行的groovy脚本