【问题标题】:Using hibernate with JavaFx on a Maven project?在 Maven 项目中使用带有 JavaFx 的休眠?
【发布时间】:2020-12-05 11:04:16
【问题描述】:

首先,希望大家平安健康,感谢您的帮助。

我和我的朋友们还在学习 java 并使用 JavaFX 开始一个 Maven 项目,现在我们也在学习 hibernate 框架,我们想将它与 JavaFX 一起使用,但是有一个我们无法处理的问题。

(我已经搜索并阅读过此类主题,但我认为没有我的问题的答案。如果对此感到抱歉。)

首先,我们启动了这个项目,它是一个电影院预订应用程序,只有 JavaFx,我负责项目的登录部分。在休眠之前,在加密信息后,我将它们存储在一个文件中,并且一切正常。在休眠之后,我尝试创建一个本地数据库并将它们组合起来以存储所有信息,但是当我为休眠创建一个 module-info.java 时,我收到一个错误,提示需要在 module-info.java 中提及其他 fx 库,然后我也将它们添加到其中并从 pom.xml 中删除,因为要处理从 2 个地方读取相同的库。

关于我正在做的过程的问题如下;

-我是否在使用 module-info.java 或 pom.xml 时犯了逻辑错误 - 如果两者都可以在同一个项目中,我该怎么办 - 实现休眠最有效的方法是什么? -我应该为这种应用程序使用多模块实现吗?

这是我的 pom.xml 和 module-info.java; pom.xml 与 module-info.java:

<?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>

    <groupId>be.javaHeverlee</groupId>
    <artifactId>CinemaApplication</artifactId>
    <version>1.0-SNAPSHOT</version>
    <name>cinemaBookingSystem</name>
    <description>starter project for javaFX</description>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <java.version>11</java.version>
        <javafx.version>13.0.1</javafx.version>
        <hibernate.version>5.4.10.Final</hibernate.version>
        <mySql.version>8.0.19</mySql.version>
    </properties>

    <dependencies>

        <!-- LOMBOK -->
        <dependency>
            <groupId>org.projectlombok</groupId>
            <artifactId>lombok</artifactId>
            <optional>true</optional>
            <version>1.18.12</version>
        </dependency>

        <!-- JAVA FX -->

        <!-- JFOENIX -->
        <dependency>
            <groupId>com.jfoenix</groupId>
            <artifactId>jfoenix</artifactId>
            <version>9.0.0</version>
        </dependency>

        <!-- DATABASE -->
        <dependency>
            <groupId>mysql</groupId>
            <artifactId>mysql-connector-java</artifactId>
            <version>${mySql.version}</version>
        </dependency>
        <dependency>
            <groupId>org.hibernate</groupId>
            <artifactId>hibernate-core</artifactId>
            <version>${hibernate.version}</version>
        </dependency>
        <dependency>
            <groupId>javax.persistence</groupId>
            <artifactId>javax.persistence-api</artifactId>
            <version>2.2</version>
        </dependency>


        <dependency>
            <groupId>org.mariadb.jdbc</groupId>
            <artifactId>mariadb-java-client</artifactId>
            <version>2.4.1</version>
        </dependency>

        <!-- FONT_AWESOME -->
        <dependency>
            <groupId>de.jensd</groupId>
            <artifactId>fontawesomefx</artifactId>
            <version>8.1</version>
        </dependency>
        <dependency>
            <groupId>org.jetbrains</groupId>
            <artifactId>annotations</artifactId>
            <version>RELEASE</version>
            <scope>compile</scope>
        </dependency>

    </dependencies>

    <build>

        <plugins>

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.0</version>
            <configuration>
                <source>${java.version}</source>
                <target>${java.version}</target>
            </configuration>
        </plugin>

        <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>be.javaHeverlee.cinemaBookingSystem.Main</mainClass>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-shade-plugin</artifactId>
            <version>2.3</version>
            <executions>
                <execution>
                    <phase>package</phase>
                    <goals>
                        <goal>shade</goal>
                    </goals>
                    <configuration>
                        <transformers>
                            <transformer
                                    implementation="org.apache.maven.plugins.shade.resource.ManifestResourceTransformer">
                                <mainClass>be.javaHeverlee.cinemaBookingSystem.Main</mainClass>
                            </transformer>
                        </transformers>
                    </configuration>
                </execution>
            </executions>
        </plugin>

        </plugins>

    </build>


</project>

和 Module-info.java:

open module CinemaApplication {
    requires lombok;

    requires org.hibernate.orm.core;
    requires java.sql;
    requires net.bytebuddy;
    requires java.xml.bind;
    requires com.fasterxml.classmate;
    requires javafx.graphics;
    requires javafx.fxml;
    requires javafx.media;
    requires javafx.controls;
    requires java.desktop;
    requires com.jfoenix;
    requires java.prefs;
    requires java.persistence;
}

我的文件夹:

根据我的研究,我可以在更改 maven>runner> 后处理运行>选择“Delaget IDE build/run actions to Maven” 但 Maven 仍然存在问题,无法正确构建或安装(mvn clean install 或 mvn clean compile)。

如果我取消选择 maven>runner>“Delaget IDE build/run actions to Maven”并尝试重建并运行得到该错误:

Information:java: compiler message file broken: key=compiler.misc.msg.bug arguments=11.0.6, {1}, {2}, {3}, {4}, {5}, {6}, {7}
Information:java: java.lang.module.ResolutionException: Module lombok does not read a module that exports org.mapstruct.ap.spi
Information:java:   at java.base/java.lang.module.Resolver.resolveFail(Resolver.java:885)
Information:java:   at java.base/java.lang.module.Resolver.checkExportSuppliers(Resolver.java:760)
Information:java:   at java.base/java.lang.module.Resolver.finish(Resolver.java:362)
Information:java:   at java.base/java.lang.module.Configuration.<init>(Configuration.java:141)
Information:java:   at java.base/java.lang.module.Configuration.resolveAndBind(Configuration.java:495)
Information:java:   at java.base/java.lang.module.Configuration.resolveAndBind(Configuration.java:299)
Information:java:   at jdk.compiler/com.sun.tools.javac.file.JavacFileManager.getServiceLoader(JavacFileManager.java:985)
Information:java:   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
Information:java:   at java.base/jdk.internal.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:62)
Information:java:   at java.base/jdk.internal.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
Information:java:   at java.base/java.lang.reflect.Method.invoke(Method.java:566)
Information:java:   at org.jetbrains.jps.javac.JavacMain$8.invoke(JavacMain.java:387)
Information:java:   at com.sun.proxy.$Proxy17.getServiceLoader(Unknown Source)
Information:java:   at com.sun.proxy.$Proxy18.getServiceLoader(Unknown Source)
Information:java:   at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.initProcessorLoader(JavacProcessingEnvironment.java:261)
Information:java:   at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.<init>(JavacProcessingEnvironment.java:237)
Information:java:   at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.instance(JavacProcessingEnvironment.java:193)
Information:java:   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.initProcessAnnotations(JavaCompiler.java:1136)
Information:java:   at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:922)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.doCall(JavacTaskImpl.java:100)
Information:java:   at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.call(JavacTaskImpl.java:94)
Information:java:   at org.jetbrains.jps.javac.JavacMain.compile(JavacMain.java:207)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.compileJava(JavaBuilder.java:486)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.compile(JavaBuilder.java:338)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.doBuild(JavaBuilder.java:263)
Information:java:   at org.jetbrains.jps.incremental.java.JavaBuilder.build(JavaBuilder.java:216)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runModuleLevelBuilders(IncProjectBuilder.java:1328)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runBuildersForChunk(IncProjectBuilder.java:1006)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildTargetsChunk(IncProjectBuilder.java:1073)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunkIfAffected(IncProjectBuilder.java:967)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.buildChunks(IncProjectBuilder.java:796)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.runBuild(IncProjectBuilder.java:378)
Information:java:   at org.jetbrains.jps.incremental.IncProjectBuilder.build(IncProjectBuilder.java:178)
Information:java:   at org.jetbrains.jps.cmdline.BuildRunner.runBuild(BuildRunner.java:140)
Information:java:   at org.jetbrains.jps.cmdline.BuildSession.runBuild(BuildSession.java:297)
Information:java:   at org.jetbrains.jps.cmdline.BuildSession.run(BuildSession.java:130)
Information:java:   at org.jetbrains.jps.cmdline.BuildMain$MyMessageHandler.lambda$channelRead0$0(BuildMain.java:232)
Information:java:   at java.base/java.util.concurrent.ThreadPoolExecutor.runWorker(ThreadPoolExecutor.java:1128)
Information:java:   at java.base/java.util.concurrent.ThreadPoolExecutor$Worker.run(ThreadPoolExecutor.java:628)
Information:java:   at java.base/java.lang.Thread.run(Thread.java:834)
Information:java: Errors occurred while compiling module 'CinemaApplication'
Information:javac 11.0.6 was used to compile java sources
Information:16/08/2020, 01:28 - Build completed with 1 error and 0 warnings in 1 s 480 ms
Error:java: Compilation failed: internal java compiler error

IntelliJ 终极版, MacOs 卡塔利娜, Java 11。

谢谢大家,

亲切的问候。

【问题讨论】:

    标签: java hibernate maven javafx


    【解决方案1】:

    您需要将 mapstruct-processor 依赖项添加到您的项目以解决此问题 将此添加到您的依赖项中

    <dependency>
        <groupId>org.mapstruct</groupId>
        <artifactId>mapstruct-processor</artifactId>
        <version>1.3.1.Final</version>
    </dependency>
    
    

    这个到你的module-info.java

    requires org.mapstruct.processor;
    

    编码愉快... :)

    【讨论】:

    • 尝试用这个module be.javaHeverlee.cinemaBookingSystem { requires lombok; requires org.mapstruct.processor; // requires ... exports be.javaHeverlee.cinemaBookingSystem; }改变你的module-info.java文件内容
    • 我觉得还有一个问题是模块名和导出包是一样的?信息:java:编译模块“CinemaApplication”时发生错误信息:javac 11.0.6 用于编译 java 源信息:2020 年 8 月 17 日,23:31 - 构建在 2 秒 236 毫秒内完成,出现 1 个错误和 0 个警告/ Users/admin/IdeaProjects/cinema-reservation-system/src/main/java/module-info.java 错误:(19、28)java:包为空或不存在:be.javaHeverlee.cinemaBookingSystem
    • 将你的 module-info.java 文件移动到 java 文件夹
    • 你确定吗?我认为它在 be.javaHeverlee.cinemaBookingSystem
    • 在显示文件夹结构的主条目中添加了一张新图片。感谢您的努力。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-02-23
    • 2014-11-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多