복붙노트

[SPRING] 퍼즐 모듈을 사용하여 jdk9로 스프링 부트 실행

SPRING

퍼즐 모듈을 사용하여 jdk9로 스프링 부트 실행

이 응용 프로그램의 문제점입니다. 클래스 패스 항아리와 모듈 항아리의 혼합이 유효하다고 생각했습니다. 명시 적 module-info를 가지고 있지 않은 모든 jar에 대해 자동 모듈이됩니까? 내 module-info.java를 삭제하면 작동합니다. 이 경우 IDEA는 클래스 경로를 사용하기 때문입니다.

Java (TM) SE 런타임 환경 (빌드 9 + 176)

IntelliJ IDEA 2017.1.4

module-info.java

module test {
    requires spring.boot.autoconfigure;
    requires spring.boot;
}

App.java

package com.foo.test;

import org.springframework.boot.SpringApplication;
import org.springframework.boot.autoconfigure.SpringBootApplication;

@SpringBootApplication
public class App {

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

pom.khml

<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>com.foo.test</groupId>
    <artifactId>test</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jar</packaging>

    <parent>
        <groupId>org.springframework.boot</groupId>
        <artifactId>spring-boot-starter-parent</artifactId>
        <version>2.0.0.M2</version>
    </parent>

    <name>test</name>
    <url>http://maven.apache.org</url>

    <properties>
        <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
        <maven.compiler.source>1.9</maven.compiler.source>
        <maven.compiler.target>1.9</maven.compiler.target>
    </properties>

    <dependencies>
        <dependency>
            <groupId>org.springframework.boot</groupId>
            <artifactId>spring-boot-starter-web</artifactId>
        </dependency>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>3.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <repositories>
        <repository>
            <id>spring-milestones</id>
            <name>Spring Milestones</name>
            <url>https://repo.spring.io/libs-milestone</url>
            <snapshots>
                <enabled>false</enabled>
            </snapshots>
        </repository>
    </repositories>
</project>

해결법

  1. ==============================

    1.spring.boot는 자동 모듈이라고 가정합니다. 자동 모듈은 의존성을 선언하지 않으므로 필요한 추가 모듈이 해결되도록하려면 --add-modules를 사용해야합니다. spring.boot가 명시 적 모듈이라면 java.sql이 필요 하고이 문제가 없을 것이라고 가정합니다.

    spring.boot는 자동 모듈이라고 가정합니다. 자동 모듈은 의존성을 선언하지 않으므로 필요한 추가 모듈이 해결되도록하려면 --add-modules를 사용해야합니다. spring.boot가 명시 적 모듈이라면 java.sql이 필요 하고이 문제가 없을 것이라고 가정합니다.

  2. ==============================

    2.마지막으로, 나는 그것을 얻었습니다 ... 내 모듈 정보는 다음과 같아야합니다 :

    마지막으로, 나는 그것을 얻었습니다 ... 내 모듈 정보는 다음과 같아야합니다 :

    module test {
        requires java.sql; // my real problem solved with this
        requires spring.boot.autoconfigure;
        requires spring.boot;
        exports com.foo.test; // subsequent error 1: beeing accessible for some spring modules
        opens com.foo.test to spring.core; // subsequent error 2: beeing accessible for spring.core in a deep reflection way
    }
    

    누군가 java.sql이 필요한 이유를 설명 할 수 있습니까? 내가 사용하지 않을 때 내 모듈 안에?

  3. ==============================

    3.MySql에 대한 jdbc 드라이버 jar이 없기 때문에 이것은 거의 확실합니다. 이 의존성을 사용해야합니다 :-

    MySql에 대한 jdbc 드라이버 jar이 없기 때문에 이것은 거의 확실합니다. 이 의존성을 사용해야합니다 :-

    <dependency>
      <groupId>mysql</groupId>
      <artifactId>mysql-connector-java</artifactId>
      <version>6.0.5</version>
    </dependency>
    
  4. from https://stackoverflow.com/questions/44910768/run-spring-boot-with-jdk9-using-jigsaw-modules by cc-by-sa and MIT license