Apache modules in java

Java 9 Modules — Developing Java 9 Modules with Apache Maven

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 .

Pom file

pom.xml

 
4.0.0

com.logicbig.example
java9-module-and-apache-maven
1.0-SNAPSHOT


org.jsoup
jsoup
1.11.3





org.apache.maven.plugins
maven-compiler-plugin
3.8.0

10
10
UTF-8




module-info.java

java9-module-and-apache-maven/src/main/java/module-info.java

We found Jsoup automatic module name by using —describe-module of ‘jar’ command:

C:\Users\Joe\.m2\repository\org\jsoup\jsoup\1.11.3>jar --file=jsoup-1.11.3.jar --describe-module
No module descriptor found. Derived automatic module.

org.jsoup@1.11.3 automatic
requires java.base mandated
contains org.jsoup
contains org.jsoup.helper
contains org.jsoup.internal
contains org.jsoup.nodes
contains org.jsoup.parser
contains org.jsoup.safety
contains org.jsoup.select

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 .

Main class

java9-module-and-apache-maven/src/main/java/com/logicbig/example/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("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):

Читайте также:  Php почему его выбирать

Running via maven exec:java

D:\java9-module-and-apache-maven>mvn -q clean compile exec:java -Dexec.mainClass="com.logicbig.example.ExampleMain"
http://www.example.com

If not requiring jsoup, i.e.

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

Running via java command

D:\java9-module-and-apache-maven\target>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

Example Project

Dependencies and Technologies Used:

  • 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]
  • JDK 10
  • Maven 3.5.4

Источник

Использование модульной платформы 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 в качестве инструмента сборки, который здесь не сильно изменился, зависимости объявляются так же, как и раньше.

Источник

Installing Java Modules¶

Java modules are regularly built and tested on macOS and Linux distributions.

Java Compatibility¶

Java modules are compatible with JDK 8 and above. Currently, JDK 8, 11, 17, and 18 are tested in CI.

When using Java 9 or later, some JDK internals must be exposed by adding —add-opens=java.base/java.nio=ALL-UNNAMED to the java command:

# Directly on the command line $ java --add-opens=java.base/java.nio=ALL-UNNAMED -jar . # Indirectly via environment variables $ env _JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED" java -jar .

Otherwise, you may see errors like module java.base does not «opens java.nio» to unnamed module .

If using Maven and Surefire for unit testing, this argument must be added to Surefire as well .

Installing from Maven¶

By default, Maven will download from the central repository: https://repo.maven.apache.org/maven2/org/apache/arrow/

Configure your pom.xml with the Java modules needed, for example: arrow-vector, and arrow-memory-netty.

  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"> 4.0.0 org.example demo 1.0-SNAPSHOT  9.0.0    org.apache.arrow arrow-vector $  org.apache.arrow arrow-memory-netty $   

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.

  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"> 4.0.0 org.example demo 1.0-SNAPSHOT  9.0.0    org.apache.arrow flight-core $     kr.motd.maven os-maven-plugin 1.7.0     

The —add-opens flag must be added when running unit tests through Maven:

    org.apache.maven.plugins maven-surefire-plugin 3.0.0-M6  --add-opens=java.base/java.nio=ALL-UNNAMED     

Or they can be added via environment variable, for example when executing your code:

_JAVA_OPTIONS="--add-opens=java.base/java.nio=ALL-UNNAMED" mvn exec:java -Dexec.mainClass="YourMainCode" 

Installing from Source¶

IDE Configuration¶

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.

Источник

Оцените статью