1

Hi I'm working on a project with the following structure:

Healthcontrol (Maven parent project), with following children Maven modules:

-dbc (Spring JPA database)

-gui (JavaFX project, implemented as shown https://drogago.net/javafxmavenspring-step-by-step/)

-central (Module, supposed to be used for communication between modules), consisting of configs and services

Project structcure image

The problem is, that we cannot inject anything from central module into GUI, error: No qualifying bean of type 'hc.module.gui.spring.configuration.Config' available. (injecting from dbc into central module is possible).

To make autowiring for dbc-central possible we use @Configuration 's :

  • 'config dbc'

  • 'config central'

and we tried to do the same for gui:

  • 'config gui'

but it doesn't see any bean of used object.

Another problem is that pom.xml of gui don't see:

<dependency>
    <groupId>hc</groupId>
    <artifactId>central</artifactId>
    <version>1.0-SNAPSHOT</version>
    <scope>compile</scope>
</dependency>

All pom's looks like: ' parent pom ' ' dbc pom ' ' central pom ' ' gui pom '

How can we make it work?

Pom healthcontrol (parent)

<?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <modelVersion>4.0.0</modelVersion>

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

        <modules>
            <module>central</module>
            <module>gui</module>
            <module>dbc</module>
        </modules>
        <packaging>pom</packaging>

        <groupId>hc</groupId>
        <artifactId>health_control</artifactId>
        <version>1.0-SNAPSHOT</version>
        <name>hc</name>

        <properties>
            <maven.compiler.source>15</maven.compiler.source>
            <maven.compiler.target>15</maven.compiler.target>
            <java.version>11</java.version>
        </properties>

        <dependencies>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-data-jpa</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-validation</artifactId>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-devtools</artifactId>
                <scope>runtime</scope>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>mysql</groupId>
                <artifactId>mysql-connector-java</artifactId>
                <scope>runtime</scope>
            </dependency>
            <dependency>
                <groupId>org.projectlombok</groupId>
                <artifactId>lombok</artifactId>
                <optional>true</optional>
            </dependency>
            <dependency>
                <groupId>org.springframework.boot</groupId>
                <artifactId>spring-boot-starter-test</artifactId>
                <scope>test</scope>
            </dependency>
        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.springframework.boot</groupId>
                    <artifactId>spring-boot-maven-plugin</artifactId>
                    <configuration>
                        <excludes>
                            <exclude>
                                <groupId>org.projectlombok</groupId>
                                <artifactId>lombok</artifactId>
                            </exclude>
                        </excludes>
                        <classifier>exec</classifier>
                        <mainClass>hc.module.gui.viewsControllers.LoginController</mainClass>
                    </configuration>
                </plugin>
            </plugins>
        </build>

    </project>

Pom GUI

 <?xml version="1.0" encoding="UTF-8"?>
    <project xmlns="http://maven.apache.org/POM/4.0.0"
             xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
             xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
        <parent>
            <artifactId>health_control</artifactId>
            <groupId>hc</groupId>
            <version>1.0-SNAPSHOT</version>
        </parent>
        <modelVersion>4.0.0</modelVersion>

        <artifactId>gui</artifactId>

        <properties>
            <maven.compiler.source>15</maven.compiler.source>
            <maven.compiler.target>15</maven.compiler.target>
        </properties>

        <packaging>jar</packaging>

        <dependencies>
            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-controls</artifactId>
                <version>17.0.0.1</version>
            </dependency>
            <dependency>
                <groupId>de.jensd</groupId>
                <artifactId>fontawesomefx-fontawesome</artifactId>
                <version>4.7.0-9.1.2</version>
            </dependency>

            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-fxml</artifactId>
                <version>17.0.0.1</version>
            </dependency>
            <dependency>
                <groupId>org.openjfx</groupId>
                <artifactId>javafx-web</artifactId>
                <version>17.0.0.1</version>
            </dependency>
            <dependency>
                <groupId>org.controlsfx</groupId>
                <artifactId>controlsfx</artifactId>
                <version>11.1.0</version>
            </dependency>
            <dependency>
                <groupId>com.dlsc.formsfx</groupId>
                <artifactId>formsfx-core</artifactId>
                <version>11.3.2</version>
                <exclusions>
                    <exclusion>
                        <groupId>org.openjfx</groupId>
                        <artifactId>*</artifactId>
                    </exclusion>
                </exclusions>
            </dependency>
            <dependency>
                <groupId>hc</groupId>
                <artifactId>central</artifactId>
                <version>1.0-SNAPSHOT</version>
                <scope>compile</scope>
            </dependency>
        </dependencies>

        <build>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>exec-maven-plugin</artifactId>
                    <version>1.6.0</version>
                    <executions>
                        <execution>
                            <goals>
                                <goal>java</goal>
                            </goals>
                        </execution>
                    </executions>
                    <configuration>
                        <mainClass>hc.module.gui.viewsControllers.LoginController</mainClass>
                    </configuration>
                </plugin>
                <plugin>
                    <groupId>org.apache.maven.plugins</groupId>
                    <artifactId>maven-shade-plugin</artifactId>
                    <version>3.0.0</version>
                    <executions>
                        <execution>
                            <phase>package</phase>
                            <goals>
                                <goal>shade</goal>
                            </goals>
                            <configuration>
                                <transformers>
                                    <transformer
                                            implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                        <mainClass>hc.module.gui.viewsControllers.LoginController</mainClass>
                                    </transformer>
                                </transformers>
                            </configuration>
                        </execution>
                    </executions>
                </plugin>
            </plugins>
        </build>

    </project>

Pom central

<?xml version="1.0" encoding="UTF-8"?>
<project xmlns="http://maven.apache.org/POM/4.0.0"
         xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"
         xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd">
    <parent>
        <artifactId>health_control</artifactId>
        <groupId>hc</groupId>
        <version>1.0-SNAPSHOT</version>
    </parent>
    <modelVersion>4.0.0</modelVersion>

    <artifactId>central</artifactId>

    <packaging>jar</packaging>
    <dependencies>
        <dependency>
            <groupId>hc</groupId>
            <artifactId>dbc</artifactId>
            <version>1.0-SNAPSHOT</version>
            <scope>compile</scope>
        </dependency>
    </dependencies>

    <properties>
        <maven.compiler.source>15</maven.compiler.source>
        <maven.compiler.target>15</maven.compiler.target>
    </properties>

</project>

Central config

package hc.module.central.configuration;

import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.context.annotation.Import;

@Configuration
@Import(hc.module.dbc.configuration.Config.class)
@ComponentScan(basePackages = "hc.module.central.services.dbc")
public class Config {
}

Gui config

package hc.module.dbc.configuration;

import org.springframework.boot.autoconfigure.domain.EntityScan;
import org.springframework.context.annotation.ComponentScan;
import org.springframework.context.annotation.Configuration;
import org.springframework.data.jpa.repository.config.EnableJpaRepositories;

@Configuration
@EnableJpaRepositories(basePackages = "hc.module.dbc.repo")
@EntityScan(basePackages = "hc.module.dbc.models")
@ComponentScan(basePackages = "hc.module.dbc.service")
public class Config {
}

Example of injection into gui

package hc.module.gui.viewsControllers;

import hc.module.gui.configuration.Config;
import javafx.application.Application;
import javafx.event.ActionEvent;
import javafx.fxml.FXML;
import javafx.fxml.FXMLLoader;
import javafx.scene.Parent;
import javafx.scene.Scene;
import javafx.stage.Stage;
import org.springframework.beans.factory.annotation.Autowired;
import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;
import org.springframework.context.ConfigurableApplicationContext;
import org.controlsfx.control.Notifications;


import java.io.IOException;

@SpringBootApplication
public class LoginController extends Application {
    private ConfigurableApplicationContext springContext;
    private Parent rootNode;

    @Autowired
    Config config;

    public static void main(String[] args) {
        Application.launch(args);
    }

    @Override
    public void start(Stage stage) throws Exception {
        stage.setScene(new Scene(rootNode, 500, 400)); //#todo
        stage.setTitle("Health Control Login");
        stage.show();
        config.run();

    }

    public void init() throws Exception {
        springContext = SpringApplication.run(LoginController.class);
        FXMLLoader fxmlLoader = new FXMLLoader(getClass().getResource("/views/login-view.fxml"));
        fxmlLoader.setControllerFactory(springContext::getBean);
        rootNode = fxmlLoader.load();
    }

    public void stop() throws Exception {
        springContext.close();
    }
}
metalogy
  • 11
  • 1
  • 1
    Baeldung have a [trouble-shooting guide](https://www.baeldung.com/spring-nosuchbeandefinitionexception#cause-1) for the error `No Qualifying Bean of Type […] Found for Dependency`. – jewelsea Jan 18 '22 at 21:12
  • Are you running `mvn install`? See this potential duplicate: [How to make one module depend on another module artifact?](https://stackoverflow.com/questions/4150180/how-to-make-one-module-depend-on-another-module-artifact) – jewelsea Jan 18 '22 at 22:01
  • Ensure, that, after you run the install, you [reload all maven projects in Idea](https://www.jetbrains.com/help/idea/delegate-build-and-run-actions-to-maven.html#maven_reimport), "To reload all Maven projects, click the Reload All Maven Projects icon on the toolbar, in the Maven tool window." – jewelsea Jan 18 '22 at 22:31

0 Answers0