代码之家  ›  专栏  ›  技术社区  ›  Ahmad Shahwan

在maven和java 9中使用java自动模块cdi.api+

  •  2
  • Ahmad Shahwan  · 技术社区  · 7 年前

    为了简单起见,我的目标是导入包 javax.enterprise.context 在java文件中。当我在没有模块的情况下执行此操作时(没有 module-info.java )一切都很顺利。

    现在当我添加一个 module-info.java 在不需要其他模块的情况下,我收到以下错误消息:
    package javax.enterprise.context is not visible (package javax.enterprise.context is declared in the unnamed module, but module javax.enterprise.context does not read it)

    requires cdi.api; 对我 module-info.java ,仅获取以下错误:
    module not found: cdi.api

    我的理解是,CDI库应该采用受jar文件名启发的自动模块名。当我和maven一起跑步时 -X 我明白了 cdi-api-2.0.jar 在我的课堂上。我相信,如果我错了,这应该转化为 cdi.api 自动模块名。但这仍然不起作用。

    pom.xml:

    <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.acme</groupId>
      <artifactId>test.java.cdi</artifactId>
      <packaging>jar</packaging>
      <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>11</maven.compiler.source>
            <maven.compiler.target>11</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
               <groupId>javax.enterprise</groupId>
               <artifactId>cdi-api</artifactId>
               <version>2.0</version>
               <scope>provided</scope>
            </dependency>
        </dependencies>
    
    </project>
    

    src/main/java/module-info.java:

    module com.acme.test.cid {
        requires cdi.api;
    }
    

    src/main/java/com/acme/main.java

    package com.acme;
    
    import javax.enterprise.context.*;
    
    class Main {}
    

    任何见解都将受到高度赞赏。

    1 回复  |  直到 7 年前
        1
  •  2
  •   Naman    7 年前

    当我使用-X指令运行maven时,我看到 cdi-api-2.0.jar 在我的 cdi.api

    否,生成类路径的模块被转换为 the unnamed module

    未找到模块:cdi.api

    cdp.api 在modulepath上找不到模块。


    我尝试复制相同的代码,但是相同的可复制代码对我来说很好,但是请注意我的日志如下:

    [DEBUG] Classpath:
    [DEBUG] Modulepath:
    [DEBUG]  .../Desktop/cdipi/target/classes
    [DEBUG]  .../.m2/repository/javax/enterprise/cdi-api/2.0/cdi-api-2.0.jar
    [DEBUG]  .../.m2/repository/javax/el/javax.el-api/3.0.0/javax.el-api-3.0.0.jar
    [DEBUG]  .../.m2/repository/javax/interceptor/javax.interceptor-api/1.2/javax.interceptor-api-1.2.jar
    [DEBUG]  .../.m2/repository/javax/inject/javax.inject/1/javax.inject-1.jar
    [DEBUG] Source roots:
    [DEBUG]  .../Desktop/cdipi/src/main/java
    [DEBUG]  .../Desktop/cdipi/target/generated-sources/annotations
    

    只要确保 maven-compiler-plugin 3.6.0 as specified in this answer.

    推荐文章