代码之家  ›  专栏  ›  技术社区  ›  nvcleemp

如何使用Java中不指定模块的库?

  •  0
  • nvcleemp  · 技术社区  · 1 年前

    自从很长一段时间以来,我最近又回到了Java开发领域,我正试图将一个旧项目升级到一个新的Java版本。这个项目使用EJML库,但我似乎无法消除VisualStudio代码中的错误消息。我已经将我所面临的问题提炼成一个展示该问题的最小工作示例。

    此示例由三个文件组成:

    pom.xml

    <?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>mwe</groupId>
        <artifactId>mwe</artifactId>
        <version>1.0-SNAPSHOT</version>
    
        <properties>
            <maven.compiler.source>1.17</maven.compiler.source>
            <maven.compiler.target>1.17</maven.compiler.target>
        </properties>
    
        <dependencies>
            <dependency>
                <groupId>org.ejml</groupId>
                <artifactId>ejml-all</artifactId>
                <version>0.43.1</version>
            </dependency>
            <dependency>
                <groupId>org.ejml</groupId>
                <artifactId>ejml-core</artifactId>
                <version>0.43.1</version>
            </dependency>
            <dependency>
                <groupId>org.ejml</groupId>
                <artifactId>ejml-cdense</artifactId>
                <version>0.43.1</version>
            </dependency>
            <dependency>
                <groupId>org.ejml</groupId>
                <artifactId>ejml-ddense</artifactId>
                <version>0.43.1</version>
            </dependency>
            <dependency>
                <groupId>org.ejml</groupId>
                <artifactId>ejml-fdense</artifactId>
                <version>0.43.1</version>
            </dependency>
            <dependency>
                <groupId>org.ejml</groupId>
                <artifactId>ejml-zdense</artifactId>
                <version>0.43.1</version>
            </dependency>
            <dependency>
                <groupId>org.ejml</groupId>
                <artifactId>ejml-simple</artifactId>
                <version>0.43.1</version>
            </dependency>
    
        </dependencies>
    </project>
    

    src/main/java/module-info.java

    module mwe {
        requires ejml.all;
        requires ejml.core;
        requires ejml.cdense;
        requires ejml.ddense;
        requires ejml.fdense;
        requires ejml.zdense;
        requires ejml.simple;
    
        exports mwe;
    }
    

    src/main/java/mwe/Main.java

    package mwe;
    
    import org.ejml.data.DenseMatrix64F;
    import org.ejml.ops.CommonOps;
    
    public class Main {
        public static void main(String[] args) {
            double[][] aArray = new double[][] {
                {1, 1}, 
                {1, 2}
            };
            DenseMatrix64F a = new DenseMatrix64F(aArray);
            DenseMatrix64F t = new DenseMatrix64F(2, 2);
    
            CommonOps.invert(a, t);
        }
    }
    

    我无法消除的错误消息首先声明导入无法解析,因此,我在使用此类的行中也会收到错误消息,声明它们无法解析为类型。

    我尝试过各种变体(例如 ejml-all 作为依赖项),但错误消息仍然存在。我甚至不知道如果不重建库以包含模块信息,这是否真的可以解决,但由于我不是EJML的所有者,我认为这不是解决这个问题的理想方法。

    我是不是错过了什么?有简单的解决方案吗?这仅仅是使用Visual Studio代码的问题,还是其他编辑器也会出现这种情况?

    1 回复  |  直到 1 年前
        1
  •  1
  •   whlit    1 年前

    我没有用过ejml。我认为你不必在fo.java中创建模块。ejml用DMatrixRMaj取代了DenseMatrix64F。你可以这样尝试:

    double[][] aArray = new double[][]{
                {1, 1},
                {1, 2}
    };
    DMatrixRMaj a = new DMatrixRMaj(aArray);
    DMatrixRMaj b = new DMatrixRMaj(2, 2);
    CommonOps_DDRM.invert(a, b);
    
    推荐文章