Following example shows how to develop Java 9 Modules using Maven (version 3.5.4).
Example
In this example we are going to create a simple Java 9 module. We are also going to use Jsoup (version 1.11.3) as an external library which is not modular, so we need to add that as an automatic module .
Jsoup jar’s MANIFEST.MF has an entry Automatic-Module-Name: org.jsoup (you have to extract the jar to see that). Check out how automatic module names are derived at the end of Java 9 Automatic Modules tutorial .
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("Example"); String s = d.getElementsByTag("a") .first() .attr("href"); System.out.println(s); > >
Above output is taken from Intellij which integrates with maven and runs the following command (you can find that in the Run view, shortcut Alt+4):
D:\java\jdk10\bin\java.exe "-javaagent:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1\lib\idea_rt.jar=59186:D:\Program Files\JetBrains\IntelliJ IDEA Community Edition 2018.1\bin" -Dfile.encoding=UTF-8 -p D:\java9-module-and-apache-maven\target\classes;C:\Users\Joe\.m2\repository\org\jsoup\jsoup\1.11.3\jsoup-1.11.3.jar -m example.module/com.logicbig.example.ExampleMain
Intellij also has autocompletion support for automatic module names (even if it’s maven project):
D:\java9-module-and-apache-maven>mvn -q clean compile exec:java -Dexec.mainClass="com.logicbig.example.ExampleMain" [ERROR] COMPILATION ERROR : [ERROR] /D:/java9-module-and-apache-maven/src/main/java/com/logicbig/example/ExampleMain.java:[3,17] package org.jsoup does not exist [ERROR] /D:/java9-module-and-apache-maven/src/main/java/com/logicbig/example/ExampleMain.java:[4,23] package org.jsoup.nodes does not exist [ERROR] /D:/java9-module-and-apache-maven/src/main/java/com/logicbig/example/ExampleMain.java:[9,9] cannot find symbol symbol: class Document location: class com.logicbig.example.ExampleMain [ERROR] /D:/java9-module-and-apache-maven/src/main/java/com/logicbig/example/ExampleMain.java:[9,22] cannot find symbol symbol: variable Jsoup location: class com.logicbig.example.ExampleMain [ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.8.0:compile (default-compile) on project java9-module-and-apache-maven: Compilation failure: Compilation failure: [ERROR] /D:/java9-module-and-apache-maven/src/main/java/com/logicbig/example/ExampleMain.java:[3,17] package org.jsoup does not exist [ERROR] /D:/java9-module-and-apache-maven/src/main/java/com/logicbig/example/ExampleMain.java:[4,23] package org.jsoup.nodes does not exist [ERROR] /D:/java9-module-and-apache-maven/src/main/java/com/logicbig/example/ExampleMain.java:[9,9] cannot find symbol [ERROR] symbol: class Document [ERROR] location: class com.logicbig.example.ExampleMain [ERROR] /D:/java9-module-and-apache-maven/src/main/java/com/logicbig/example/ExampleMain.java:[9,22] cannot find symbol [ERROR] symbol: variable Jsoup [ERROR] location: class com.logicbig.example.ExampleMain [ERROR] -> [Help 1] [ERROR] [ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch. [ERROR] Re-run Maven using the -X switch to enable full debug logging. [ERROR] [ERROR] For more information about the errors and possible solutions, please read the following articles: [ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/MojoFailureException
jsoup 1.11.3: jsoup is a Java library for working with real-world HTML. It provides a very convenient API for extracting and manipulating data, using the best of DOM, CSS, and jquery-like methods. jsoup implements the WHATWG HTML5 specification, and parses HTML to the same DOM as modern browsers do. [Description from jsoup-1.11.3.pom]
Использование модульной платформы Java: Apache CXF на Java 10
Прошёл почти год с тех пор, как релиз Java 9 наконец доставил Project Jigsaw в массы Это был долгий, долгий путь, но он есть, так что же изменилось? Это очень хороший вопрос, и ответ на него не очевиден и однозначен.
В общем и целом, Project Jigsaw – это разрушительное изменение, и есть много причин, почему. Хотя в основном все наши существующие приложения будут работать на Java 10 (скоро будет заменен на JDK 11 ) с минимальными изменениями или без изменений, у Project Jigsaw есть глубокие и глубокие последствия для разработчиков Java: использование модульных приложений Java Платформа способ.
С множеством потрясающих фреймворков и библиотек, несомненно, потребуется время, много времени, чтобы преобразовать их в модули Java (многие даже не смогут это сделать). Этот путь тернист, но есть определенные вещи, которые уже возможны даже сегодня. В этом довольно коротком посте мы узнаем, как использовать потрясающий проект Apache CXF для создания по – настоящему модульных веб-API JAX-RS 2.1 с использованием последней версии JDK 10 .
Начиная с версии 3.2.5 , все артефакты Apache CXF имеют свои манифесты, обогащенные директивой Automatic-Module-Name . Это не делает их полноценными модулями , но это первый шаг в правильном направлении. Итак, давайте начнем …
Если вы используете Apache Maven в качестве инструмента сборки, который здесь не сильно изменился, зависимости объявляются так же, как и раньше.
To use the Arrow Flight dependencies, also add the os-maven-plugin plugin. This plugin generates useful platform-dependent properties such as os.detected.name and os.detected.arch needed to resolve transitive dependencies of Flight.
Generally, no additional configuration should be needed. However, ensure your Maven or other build configuration has the —add-opens flag as described above, so that the IDE picks it up and runs tests with that flag as well.