Yo hice:

  • proyecto creado con algunas dependencias.
  • creó el primer módulo maven (web).
  • creó el segundo módulo maven (modelo).
  • código movido al módulo web: clase principal + controlador.
  • src eliminado de la raíz (porque ya está vacío)
  • en la entidad creada por el módulo modelo, se agregaron las dependencias del controlador JPA / MySQl a pom.xml de este módulo.
  • en el módulo web se agregó dependencia del módulo modelo.

El proyecto se ejecuta sin errores, el módulo web ve la dependencia del modelo . Pero el código de entidad no funciona (no se crea una tabla en la base de datos). Si muevo la clase al módulo web , funciona. Exactamente: funciona, pero las dependencias de JPA / MySQL todavía están en el módulo modelo .

¿Cómo es? ¿Que estoy haciendo mal?...

Jugué con los nombres de groupId y artifactId, con el nombre del módulo, moví application.propeties a model module - 0 reacción.

Mi proyecto:

- modelo / src / main / java y resources / com / example / demo / model

Pom.xml:

<modelVersion>4.0.0</modelVersion>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.example.demo.model</groupId>
    <artifactId>model</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>module-model</name>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-data-jpa</artifactId>
        </dependency>
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <scope>runtime</scope>
        </dependency>
    </dependencies>

- web / src / main / java y resources / com / example / demo / web

Application.properties con conexión de base de datos a MySQL.

Pom.xml

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.2.2.RELEASE</version>
        <relativePath/> <!-- lookup parent from repository -->
    </parent>

    <groupId>com.example.demo.web</groupId>
    <artifactId>web</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <name>module-web</name>
    <description>Web project</description>

    <properties>
        <java.version>1.8</java.version>
    </properties>


    <dependencies>
        <dependency>
            <groupId>com.example.demo.model</groupId>
            <artifactId>model</artifactId>
            <version>0.0.1-SNAPSHOT</version>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-test</artifactId>
            <scope>test</scope>
            <exclusions>
                <exclusion>
                    <groupId>org.junit.vintage</groupId>
                    <artifactId>junit-vintage-engine</artifactId>
                </exclusion>
            </exclusions>
        </dependency>

    </dependencies>

    <build>
        <plugins>
            <plugin>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-maven-plugin</artifactId>
            </plugin>
        </plugins>
    </build>

Core pom.xml:

<modelVersion>4.0.0</modelVersion>

    <groupId>com.example</groupId>
    <artifactId>demo</artifactId>
    <version>0.1.0</version>
    <packaging>pom</packaging>

    <description>Demo project for Spring Boot</description>
    <name>demo</name>

    <modules>
        <module>web</module>
        <module>model</module>
    </modules>
0
andrew17 8 dic. 2019 a las 05:12

2 respuestas

@ComponentScan le dice a Spring en qué paquetes ha anotado clases que Spring debe administrar. y de forma predeterminada, escanea el paquete principal, por lo que si la aplicación de arranque de primavera en com. ejemplo, solo se escanearán todas las clases de este paquete. así que si los movió bajo un paquete diferente, la aplicación Spring no los reconocerá.

Si este es el caso, puede agregar varios paquetes para escanear @ComponentScan ({"x.y.z", "x.y.z.dao"})

0
abanoub wagih 9 dic. 2019 a las 01:36

También puede ajustar @SpringBootApplication (scanBasePackages = {"com.example.demo.model", "com.example.demo.web"}) anotación con "scanBasePackages" que usa @ComponentScan. Y tenga en cuenta que debe agregar esta anotación en "Proyecto web"

@SpringBootApplication(scanBasePackages = "com.example.demo.model","com.example.demo.web" })
public class WebApplication {

    public static void main(String[] args) {
        SpringApplication.run(WebApplication.class, args);
    }

}
1
Sergii Povzaniuk 9 dic. 2019 a las 18:55