当前位置: 首页 > article >正文

Java 9模块与Maven的深度结合

在Java 9引入模块化之后,如何将模块化与Maven项目结合成为了许多开发者关注的焦点。本文将通过一个简单的示例,展示如何在Maven项目中开发Java 9模块,并使用非模块化的外部库(如Jsoup)。

1. Maven项目配置

首先,我们需要创建一个Maven项目,并在pom.xml中配置相关的依赖和插件。以下是完整的pom.xml文件内容:

<project .....>  
    <modelVersion>4.0.0</modelVersion>  
    <groupId>com.logicbig.example</groupId>  
    <artifactId>java9-module-and-apache-maven</artifactId>  
    <version>1.0-SNAPSHOT</version>  
    <dependencies>  
        <dependency>  
            <groupId>org.jsoup</groupId>  
            <artifactId>jsoup</artifactId>  
            <version>1.11.3</version>  
        </dependency>  
    </dependencies>  
    <build>  
        <plugins>  
            <plugin>  
                <groupId>org.apache.maven.plugins</groupId>  
                <artifactId>maven-compiler-plugin</artifactId>  
                <version>3.8.0</version>  
                <configuration>  
                    <source>10</source>  
                    <target>10</target>  
                    <encoding>UTF-8</encoding>  
                </configuration>  
            </plugin>  
        </plugins>  
    </build>  
</project>

在这个配置中,我们指定了项目的基本信息,添加了Jsoup作为依赖,并配置了maven-compiler-plugin以支持Java 10的编译。

2. 创建模块描述文件

Java 9模块需要一个module-info.java文件来声明模块的依赖关系。以下是module-info.java的内容:

module example.module {
    requires org.jsoup;
}

这个文件声明了当前模块依赖于org.jsoup模块。需要注意的是,Jsoup本身并不是一个模块化的库,因此我们需要将其作为自动模块使用。

3. 自动模块的处理

由于Jsoup不是模块化的库,我们需要通过jar --describe-module命令来查找其自动模块名称。在Jsoup的JAR文件中,MANIFEST.MF文件声明了Automatic-Module-Name: org.jsoup。这意味着我们可以将Jsoup作为自动模块org.jsoup来使用。

4. 主类的实现

接下来,我们编写一个简单的主类ExampleMain,用于演示如何使用Jsoup解析HTML内容。以下是ExampleMain.java的代码:

package com.logicbig.example;

import org.jsoup.Jsoup;
import org.jsoup.nodes.Document;

public class ExampleMain {
    public static void main(String[] args) {
        Document d = Jsoup.parse("<a href='http://www.example.com'>Example</a>");
        String s = d.getElementsByTag("a").first().attr("href");
        System.out.println(s);
    }
}

在这个主类中,我们使用Jsoup解析了一个简单的HTML字符串,并提取了<a>标签的href属性。

5. 运行项目

使用Maven运行

我们可以通过Maven的exec:java插件来运行项目。在项目根目录下执行以下命令:

mvn -q clean compile exec:java -Dexec.mainClass="com.logicbig.example.ExampleMain"

如果一切正常,程序将输出http://www.example.com

使用Java命令运行

我们也可以通过Java命令直接运行模块化项目。在目标目录下执行以下命令:

java --module-path classes;C:\Users\Joe\.m2\repository\org\jsoup\jsoup\1.11.3 --module example.module/com.logicbig.example.ExampleMain

同样,程序将输出http://www.example.com

6. 常见问题及解决方法

如果在运行过程中遇到编译错误,例如package org.jsoup does not exist,可能是因为模块声明文件module-info.java中缺少requires语句。确保module-info.java正确声明了依赖的模块。

此外,如果Maven编译失败并抛出MojoFailureException,通常是由于依赖问题或代码错误导致的。可以通过查看Maven的错误日志来定位问题。

7. 总结

通过本文的示例,我们展示了如何在Maven项目中开发Java 9模块,并使用非模块化的外部库。通过合理配置pom.xmlmodule-info.java,我们可以轻松地将Java 9模块化特性与Maven项目结合,同时利用现有的非模块化库。希望本文能为正在探索Java 9模块化的开发者提供一些帮助。


http://www.kler.cn/a/568091.html

相关文章:

  • Deepseek 开源周第一天:FlashMLA
  • 2025年证券从业资格考试报名全流程图解✅
  • 期权帮|国内期权交易投资人做卖出期权价差交易收取的保证金是单边的还是双向的?
  • OpenWebUI配置异常的外部模型导致页面无法打开
  • C# 牵手DeepSeek:打造本地AI超能力
  • 杰发科技AC7801——滴答定时器获取时间戳
  • 2025春新生培训数据结构(树,图)
  • HTML 日常开发常用标签
  • RabbitMQ—保障消费者的可靠性和机制与策略
  • 【Vue教程】使用Vite快速搭建前端工程化项目 Vue3 Vite Node.js
  • 怎么写C#命令行参数程序,及控制台带参数案例(程序完整源码)下载
  • 【造个轮子】使用Golang实现简易令牌桶算法
  • 数据库测试
  • 蓝桥杯---归并排序算法题目(leetcode第912题)
  • 【SQL】MySQL中的字符串处理函数:concat 函数拼接字符串,COALESCE函数处理NULL字符串
  • 供应链管理系统--升鲜宝门店收银系统功能解析,登录、主界面、会员 UI 设计图(一)
  • 构建神经网络之常用pandas(补充中 )
  • JEEWMS departController.do存在SQL注入(DVB-2025-8837)
  • 【Python爬虫(93)】爬虫项目的安全防线:审计与合规攻略
  • Cocos Creator3.8.6拖拽物体的几种方式