在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.xml和module-info.java,我们可以轻松地将Java 9模块化特性与Maven项目结合,同时使用现有的非模块化库。希望本文能为正在探索Java 9模块化的开发者提供一些资助。
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。 |