pacote Java 11 é declarado no módulo que não exportá-lo

invzbl3:

Eu criei dois programas modulares. Um deles é projeto modular JavaFX que contém module-info.javacomo:

module checker {
    requires javafx.fxml;
    requires javafx.controls;
    requires TextInputProgram; // Btw, IDEA shows me here "Ambiguous module reference"
    exports sample;
    opens sample;
}

Outro projeto Maven que contém module-info.javacomo:

module TextInputProgram {
    requires selenium.api;
    requires selenium.chrome.driver;
}

Então, eu adicionei projeto Maven modular como jar externo em JavaFX (via estrutura do projeto no libs e no módulo-info via requiresI especificado jar). Também I adicionado variável que contém frasco externo para a compilação (para além de PATH_TO_FXe PATH_TO_FX_MODS):

set EXTERNAL_JAR="...\out\artifacts\TextInputProgram_jar"

Mas quando eu estou tentando compilar o projeto através do comando:

dir /s /b src\*.java > sources.txt & javac --module-path %EXTERNAL_JAR%;%PATH_TO_FX% -d mods/checker @sources.txt & del sources.txt

seguir este tutorial

Eu estou recebendo a partir de JavaFX classe projeto o erro:

\src\sample\Controller.java:9: error: package project is not visible
import project.SeleniumProgram;
       ^
  (package project is declared in module TextInputProgram, which does not export it)
1 error

Package is declared in module which does not export it

import project.SeleniumProgram Eu importados no projeto JavaFX usar classes de jar externo.

Atualizada:

Se eu adicionar exports project;module-info.java interior do projeto maven então eu vejo o erro no JavaFX module-info.java:

digite descrição da imagem aquiSe eu excluir requires TextInputProgram;, em seguida, eu tenho um outro erro de importação:

digite descrição da imagem aqui

Estou faltando alguma coisa aqui? Eu estou tentando obter Jar executável destes dois programas.

José Pereda:

Como discutido ao longo dos comentários, há algumas possíveis problemas aqui:

  • definição de módulo

  • frascos e dependências locais

Com base nos projetos modulares postados, eu vou criar um pequeno projeto multi-modular de demonstração para explicar ambos os problemas.

Maven projeto multi-modular

Usando seu IDE, crie um projeto Maven, em seguida, adicionar dois módulos, TextInputPrograme checker, como:

pom pai

<groupId>org.openjfx</groupId>
<artifactId>hellofx</artifactId>
<version>1.0-SNAPSHOT</version>
<modules>
    <module>TextInputProgram</module>
    <module>checker</module>
</modules>
<packaging>pom</packaging>

TextInputProgram pom

<parent>
    <groupId>org.openjfx</groupId>
    <artifactId>hellofx</artifactId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>TextInputProgram</artifactId>

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

<dependencies>
    <dependency>
        <groupId>org.seleniumhq.selenium</groupId>
        <artifactId>selenium-java</artifactId>
        <version>3.141.59</version>
    </dependency>
</dependencies>

<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
    </plugins>
</build>

Module-info.java

module TextInputProgram {
    requires selenium.api;
    requires selenium.chrome.driver;

    exports project to checker;
}

Checker pom

<parent>
    <artifactId>testMods</artifactId>
    <groupId>org.openjfx</groupId>
    <version>1.0-SNAPSHOT</version>
</parent>
<modelVersion>4.0.0</modelVersion>

<artifactId>checker</artifactId>

<dependencies>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-controls</artifactId>
        <version>12.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>javafx-fxml</artifactId>
        <version>12.0.2</version>
    </dependency>
    <dependency>
        <groupId>org.openjfx</groupId>
        <artifactId>TextInputProgram</artifactId>
        <version>1.0-SNAPSHOT</version>
    </dependency>
</dependencies>
<build>
    <plugins>
        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <release>11</release>
            </configuration>
        </plugin>
        <plugin>
            <groupId>org.openjfx</groupId>
            <artifactId>javafx-maven-plugin</artifactId>
            <version>0.0.3</version>
            <configuration>
                <mainClass>sample.Main</mainClass>
            </configuration>
        </plugin>
    </plugins>
</build>

Module-info.java

module checker {
    requires javafx.fxml;
    requires javafx.controls;
    requires TextInputProgram;

    opens sample to javafx.fxml;

    exports sample;
}

(Código de ambos os módulos é irrelevante neste momento).

soluções incluído

Agora note que você tem que adicionar isso no TextInputProgramdescritor de módulo:

exports project to checker;

Se você quer deixar checkermódulo para acesso TextInputProgramé projectpacote.

Isto irá resolver este erro:

projeto pacote é declarado em TextInputProgram módulo, que não exportá-lo

Além disso, note que eu incluí esta dependência no checkerprojeto:

<dependency>
    <groupId>org.openjfx</groupId>
    <artifactId>TextInputProgram</artifactId>
    <version>1.0-SNAPSHOT</version>
</dependency>

Mesmo tendo dois módulos, sob o mesmo pai, você precisa incluir a dependência de um módulo para o outro. Caso contrário, este irá falhar (módulo não encontrado):

requires TextInputProgram;

Você pode executar mvn clean installno TextInputProgrammódulo, para instalar org.openjfx:TextInputProgram:1.0-SNAPSHOTem seu repositório local .m2.

Em seguida, você pode executar mvn clean javafx:runint a checker module, para executar o projeto GUI.

Vale ressaltar que não é uma boa idéia para combinar as duas dependências Maven com arquivos jar. Se você acabar usando ambos, você irá obter este erro:

'Verificador' módulo lê 'projecto' de ambos 'TextInputProgram' e 'TextInputProgram'

Esta mensagem significa que existem dois módulos no caminho do módulo com o mesmo nome, um a dependência Maven, o outro, o artefato JAR.

A fim de distribuir o seu projeto e módulos, é melhor usar a abordagem maven, e arquivos jar evitar ter em pastas lib. Mais tarde, os módulos serão publicados como artefatos separados, e você não precisará modificar seus arquivos pom (exceto para atualizar os números de versão).

Acho que você gosta

Origin http://43.154.161.224:23101/article/api/json?id=235594&siteId=1
Recomendado
Clasificación