Java 9模块与Maven的深度结合

打印 上一主题 下一主题

主题 961|帖子 961|积分 2883

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

起首,我们需要创建一个Maven项目,并在pom.xml中设置相干的依靠和插件。以下是完整的pom.xml文件内容:
  1. <project .....>  
  2.     <modelVersion>4.0.0</modelVersion>  
  3.     <groupId>com.logicbig.example</groupId>  
  4.     <artifactId>java9-module-and-apache-maven</artifactId>  
  5.     <version>1.0-SNAPSHOT</version>  
  6.     <dependencies>  
  7.         <dependency>  
  8.             <groupId>org.jsoup</groupId>  
  9.             <artifactId>jsoup</artifactId>  
  10.             <version>1.11.3</version>  
  11.         </dependency>  
  12.     </dependencies>  
  13.     <build>  
  14.         <plugins>  
  15.             <plugin>  
  16.                 <groupId>org.apache.maven.plugins</groupId>  
  17.                 <artifactId>maven-compiler-plugin</artifactId>  
  18.                 <version>3.8.0</version>  
  19.                 <configuration>  
  20.                     <source>10</source>  
  21.                     <target>10</target>  
  22.                     <encoding>UTF-8</encoding>  
  23.                 </configuration>  
  24.             </plugin>  
  25.         </plugins>  
  26.     </build>  
  27. </project>
复制代码
在这个设置中,我们指定了项目标基本信息,添加了Jsoup作为依靠,并设置了maven-compiler-plugin以支持Java 10的编译。
2. 创建模块描述文件

Java 9模块需要一个module-info.java文件来声明模块的依靠关系。以下是module-info.java的内容:
  1. module example.module {
  2.     requires org.jsoup;
  3. }
复制代码
这个文件声明了当前模块依靠于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的代码:
  1. package com.logicbig.example;
  2. import org.jsoup.Jsoup;
  3. import org.jsoup.nodes.Document;
  4. public class ExampleMain {
  5.     public static void main(String[] args) {
  6.         Document d = Jsoup.parse("<a href='http://www.example.com'>Example</a>");
  7.         String s = d.getElementsByTag("a").first().attr("href");
  8.         System.out.println(s);
  9.     }
  10. }
复制代码
在这个主类中,我们使用Jsoup分析了一个简单的HTML字符串,并提取了<a>标签的href属性。
5. 运行项目

使用Maven运行

我们可以通过Maven的exec:java插件来运行项目。在项目根目次下实行以下命令:
  1. mvn -q clean compile exec:java -Dexec.mainClass="com.logicbig.example.ExampleMain"
复制代码
如果一切正常,步伐将输出http://www.example.com。
使用Java命令运行

我们也可以通过Java命令直接运行模块化项目。在目标目次下实行以下命令:
  1. 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.xml和module-info.java,我们可以轻松地将Java 9模块化特性与Maven项目结合,同时使用现有的非模块化库。希望本文能为正在探索Java 9模块化的开发者提供一些资助。

免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
回复

使用道具 举报

0 个回复

倒序浏览

快速回复

您需要登录后才可以回帖 登录 or 立即注册

本版积分规则

灌篮少年

金牌会员
这个人很懒什么都没写!
快速回复 返回顶部 返回列表