Java 春季套餐交换

Java 春季套餐交换,java,spring,package,Java,Spring,Package,我对Spring框架相当陌生。我有问题,我甚至不知道从哪里开始。 我给你举个我想做的例子。 假设我有那些包裹 com.version.v1 com.version.v1_3 com.version.v2 com.restofapplication... 所有版本软件包都是一个模块的副本,只需稍作更改。是否可以以某种方式配置spring,只需在applicationContext.xml中告诉它使用例如v1_3,它使用v1_3包编译其余应用程序 还有一个问题,但首先是包裹状态: 假设v1是基本版

我对Spring框架相当陌生。我有问题,我甚至不知道从哪里开始。 我给你举个我想做的例子。 假设我有那些包裹

com.version.v1
com.version.v1_3
com.version.v2
com.restofapplication...
所有版本软件包都是一个模块的副本,只需稍作更改。是否可以以某种方式配置spring,只需在applicationContext.xml中告诉它使用例如v1_3,它使用v1_3包编译其余应用程序

还有一个问题,但首先是包裹状态: 假设v1是基本版本,包含

SomeInterface.java
SomeInterfaceImpl.java
SomeDependentClass.java
v1_3看起来像:

SomeInterfaceImpl.java
SomeDependentClass.java
所以,在回答了第一个问题之后,是否有可能避免完整的软件包复制,并使spring只从请求的版本中获取更改过的文件,并扫描较低版本中丢失的文件

你能回答我吗?有可能吗?提供一些线索?点方向? 无论如何,谢谢你阅读

好的,让我们提供更多信息。 我知道我应该使用GIT这样的工具来实现这一点,但我的意图不同。 Git用于代码版本控制

这就是我要你做的

我有一个带有一个端点的Web服务,这个端点是在v1包中创建的。 假设我需要修改这个端点,通过复制v1并修改它来创建v2包。 但我需要两个版本都准备好运行或同时运行,所以这不是典型的GIT用法

我在第一个问题中问的是,这是不是:在编译过程中可以选择哪个版本将被激活?现在我知道这是Maven任务而不是Spring,但这可能吗


第二个问题。我说我在V1的基础上修改创建了V2。但假设只修改了一个文件。那么有没有办法只将一个文件复制到V2,并告诉Spring/maven从V1收集丢失的文件?

这不是Spring的工作。您应该使用诸如CVS、SVN、Git等SCM系统。这是完整的清单


如果您的项目中必须有不同的版本,那么我建议使用Ant或Maven为ex.build创建一个智能构建系统,但这将是一个更昂贵的解决方案

您可能会为每个可能的用例创建上下文,并根据您的需要在根上下文中导入它们,但是您需要交付所有包。像这样

<import resource="services.xml"/>
<import resource="resources/messageSource.xml"/>
<import resource="/resources/themeSource.xml"/>

<bean id="bean1" class="..."/>
<bean id="bean2" class="..."/>

但为了区分交付,您必须进行三种不同的构建,并使用或不使用上述任何配置工具。

您可能应该使用SCM来实现这一点,但如果必须的话

您可以通过代码使用Spring3.1设置上下文组件扫描。这将取决于您为上述规则实现过滤器

请参阅java文档了解ComponentScan

如果无法使ComponentScan正常工作,您还需要查看注释ConfigWebApplicationContext,对其进行扩展,然后调用寄存器并从构造函数进行扫描。像这样:

public class CustomContext extends AnnotationConfigWebApplicationContext {
    public CustomContext() {
        super();
        this.scan("com.version.v2");
        this.register(com.version.v1.SomeInterface.class);
    }
}

有没有人给你这样的印象,春天就是为了这个?这似乎是个奇怪的要求。