Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/319.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 基于Spring MVC注释的多模块项目配置_Java_Spring_Maven_Spring Mvc_Multi Module - Fatal编程技术网

Java 基于Spring MVC注释的多模块项目配置

Java 基于Spring MVC注释的多模块项目配置,java,spring,maven,spring-mvc,multi-module,Java,Spring,Maven,Spring Mvc,Multi Module,我使用SpringMVC、hibernate和Jax-RS实现了两个基于maven的独立web项目 但是我的需求改变了,现在我需要将这两个项目作为子项目合并到另一个项目中,这是我们的父项目。所以我使用maven多模块配置 项目1:父项目 pom ../child1 ../child2 儿童1: jar com.xyz.alpha 父母亲 0.0.1-快照 ../parent 儿童2: jar com.xyz.alpha 孩子1 2.0.2 com.xyz.alpha 父母亲 0.0.1-快照

我使用SpringMVC、hibernate和Jax-RS实现了两个基于maven的独立web项目

但是我的需求改变了,现在我需要将这两个项目作为子项目合并到另一个项目中,这是我们的父项目。所以我使用maven多模块配置

项目1:父项目
pom
../child1
../child2
儿童1:
jar
com.xyz.alpha
父母亲
0.0.1-快照
../parent
儿童2:
jar
com.xyz.alpha
孩子1
2.0.2
com.xyz.alpha
父母亲
0.0.1-快照
../parent
但我需要在Java中配置project,使其能够扫描父项目、子项目和执行项目的组件。 目前,我对每个项目都有单独的配置,如下所示:

appinitializer.java HibernateConfiguration.java
第二个模块如果是SpringMVC或任何webapplication模块,那么它应该与第一个模块有依赖关系。在下面起草一个示例结构,希望对您有所帮助:

child1 pom:

<parent>
    <groupId>com.xyz.alpha</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>child1-app</artifactId>
<packaging>jar</packaging>
<build>
</build>
<dependencies>
</dependencies>

最好的配置是使用Maven反应堆项目。好的是,你似乎正在使用它

首先,您的父级不应该有任何spring组件,它应该只由POM(BOM-物料清单)组成,以定义依赖版本,可能还有一些插件在子模块之间共享。这些依赖项应该在DependencyManagement标记中,插件应该在PluginManagement中,但这实际上取决于您是否需要在子模块中强制执行某些行为

如果您有父POM和两个子模块,并且希望扫描这两个子模块以查找Spring组件,那么我将亲自创建第三个子模块,并使用相同的父POM和两个子模块作为依赖项。在您的主类中,我只需使用自定义的
@ComponentScan
定义
@SpringBootApplication
,它有一个参数定义要扫描的包。您可以使用这两个模块的包前缀来填充该参数,这样就很好了


另一种方法是创建完全独立的项目,该项目依赖于这些子模块。但是,这要求您在本地maven存储库中安装这些子模块。在第一种解决方案中,如果您总是一次构建整个项目,则不能在repo中安装这些组件。

Spring提供了许多官方教程,后面是多模块源代码。基于此,每个模块都有自己的配置。父级是spring boot starter父级的子级。因此,您可以通过单个操作构建它,但仍然需要手动运行每个操作。您正在寻找的打包类型是
EAR
,它允许您通过单个操作构建和执行整个项目,并解决跨模块依赖关系。我不明白,为什么要扫描父级?父级是这里的根POM,它不应该包含Java源代码。您想启动什么JAR以及如何启动?
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.x.y")
public class AppConfig extends WebMvcConfigurerAdapter{
     
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }
    
    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }
    
    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }
    
    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
      
    }
}
@Configuration
@EnableTransactionManagement
@ComponentScan({ "com.x.y.configuration" })
@PropertySource(value = { "classpath:application.properties" })
public class HibernateConfiguration {
 
    @Autowired
    private Environment environment;
 
    @Bean
    public LocalSessionFactoryBean sessionFactory() {
        LocalSessionFactoryBean sessionFactory = new LocalSessionFactoryBean();
        sessionFactory.setDataSource(dataSource());
        sessionFactory.setPackagesToScan(new String[] { "com.x.y.model" });
        sessionFactory.setHibernateProperties(hibernateProperties());
        return sessionFactory;
     }
     
    @Bean
    public DataSource dataSource() {
        DriverManagerDataSource dataSource = new DriverManagerDataSource();
        dataSource.setDriverClassName(environment.getRequiredProperty("jdbc.driverClassName"));
        dataSource.setUrl(environment.getRequiredProperty("jdbc.url"));
        dataSource.setUsername(environment.getRequiredProperty("jdbc.username"));
        dataSource.setPassword(environment.getRequiredProperty("jdbc.password"));
        return dataSource;
    }
     
    private Properties hibernateProperties() {
        Properties properties = new Properties();
        properties.put("hibernate.dialect", environment.getRequiredProperty("hibernate.dialect"));
        properties.put("hibernate.show_sql", environment.getRequiredProperty("hibernate.show_sql"));
        properties.put("hibernate.format_sql", environment.getRequiredProperty("hibernate.format_sql"));
        properties.put("hibernate.hbm2ddl.auto", environment.getRequiredProperty("hibernate.hbm2ddl.auto"));
        return properties;        
    }
     
    @Bean
    @Autowired
    public HibernateTransactionManager transactionManager(SessionFactory s) {
       HibernateTransactionManager txManager = new HibernateTransactionManager();
       txManager.setSessionFactory(s);
       return txManager;
    }
}
<parent>
    <groupId>com.xyz.alpha</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>child1-app</artifactId>
<packaging>jar</packaging>
<build>
</build>
<dependencies>
</dependencies>
<parent>
    <groupId>com.xyz.alpha</groupId>
    <artifactId>parent</artifactId>
    <version>0.0.1-SNAPSHOT</version>
</parent>
<artifactId>child2-Webapp</artifactId>
<packaging>war</packaging>
<build>
</build>
<dependencies>
    <dependency>
        <groupId>org.sonatype.mavenbook.multi</groupId>
        <artifactId>child1-app</artifactId>
        <version>1.0</version>
      </dependency>
</dependencies>
@Import({HibernateConfiguration.class})
@Configuration
@EnableWebMvc
@ComponentScan(basePackages = "com.x.y")
public class AppConfig extends WebMvcConfigurerAdapter{
    @Bean
    public ViewResolver viewResolver() {
        InternalResourceViewResolver viewResolver = new InternalResourceViewResolver();
        viewResolver.setViewClass(JstlView.class);
        viewResolver.setPrefix("/WEB-INF/views/");
        viewResolver.setSuffix(".jsp");
        return viewResolver;
    }

    @Override
    public void addCorsMappings(CorsRegistry registry) {
        registry.addMapping("/**");
    }

    @Override
    public void configureDefaultServletHandling(DefaultServletHandlerConfigurer configurer) {
        configurer.enable();
    }

    @Override
    public void addResourceHandlers(ResourceHandlerRegistry registry) {
        registry.addResourceHandler("/resources/**").addResourceLocations("/resources/");
    }
}