Поддерживает ли JPMS версию модуля?

Я думал, что JPMS не поддерживает версию модуля. Однако когда я делаю java --list-modules, я получаю следующий результат:

java.activation@9
java.base@9
java.compiler@9
java.corba@9
java.datatransfer@9
java.desktop@9
java.instrument@9 
....

Итак, я не могу понять, что это за @9. Это версия что ли? Если JPMS поддерживает версию модуля, могу ли я указать в информации о модуле модуля A, что для этого модуля A требуется модуль B определенной версии?


person Pavel_K    schedule 08.01.2018    source источник


Ответы (3)


Я не могу понять, что это за @ 9. Это версия что ли?

Да, это версия модуля.

Если JPMS поддерживает версию модуля, могу ли я указать в информации о модуле модуля A, что для этого модуля A требуется модуль B определенной версии?

Нет, вы не можете ссылаться на конкретную версию модуля в объявлении другого модуля. Я считаю, что это всегда четко упоминалось в Состояние модуля System # Module Заявления

Объявление модуля не включает строку версии, а также ограничения на строки версии модулей, от которых она зависит. Это сделано намеренно, поскольку не является целью модульной системы решить проблему проблема выбора версии, которую лучше оставить для создания инструментов и контейнерных приложений.

person Naman    schedule 08.01.2018
comment
Однако ни один инструмент сборки не решит проблему двух модулей, требующих другой версии другого модуля ... - person 9ilsdx 9rvj 0lo; 04.06.2019
comment
@ 9ilsdx9rvj0lo: Фреймворк модулей OSGi для Java поддерживает это! См. этот ответ. - person Lii; 15.08.2020

Чтобы пролить больше света на существующую @9 информацию:

JVMS 9 включает поле module_version_index в Module_attribute, т. Е. Формат файла класса поддерживает сохранение строки версии модуля, даже если был определен requires_version_index, но я не знаю ни одной спецификации, относящейся к оценка этой версии, делая эти данные чисто информативными.

Более подробную информацию о текущем статусе (по состоянию на Java 9 GA) относительно версий модулей можно найти в Обзор проблемы. Формат версий определяется в ModuleDescriptor. Версия API.

person Stephan Herrmann    schedule 09.01.2018

Система модулей Java не намеревается решать проблему выбора версии или проверки.

Однако он поддерживает добавление информации о версии в jar-файл модуля, доступный через Module API.

Точно так же предложение «требует» в другом модуле будет содержать версию зависимости, для которой он был скомпилирован. Обязательным условием является то, что другой модуль должен содержать номер версии.

Наличие обеих этих версий, доступных через API, позволяет другим фреймворкам проверять, имеет ли приложение, составленное из разных модулей, совместимые версии (например, на основе семантического управления версиями).

В сборке maven следующее использование инструмента java ‘jar’ позволяет добавить project.version в модульную jar:

<plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>exec-maven-plugin</artifactId>
            <version>1.6.0</version>
            <executions>
                <execution>
                    <id>add-version-to-jar</id>
                    <phase>package</phase>
                    <goals>
                        <goal>exec</goal>
                    </goals>
                    <configuration>
                        <executable>jar</executable>
                        <workingDirectory>${project.build.directory}</workingDirectory>
                        <arguments>
                            <argument>--update</argument>
                            <argument>--verbose</argument>
                            <argument>--module-version</argument>
                            <argument>${project.version}</argument>
                            <argument>--file</argument>
                            <argument>${project.build.finalName}.jar</argument>
                            <argument>-C</argument>
                            <argument>${project.build.outputDirectory}</argument>
                            <argument>.</argument>
                        </arguments>
                    </configuration>
                </execution>
            </executions>
</plugin>

Более подробное описание и код, показывающий это, можно найти на

person tomdw    schedule 25.02.2018