相关疑难解决方法(0)

什么是自动模块?

在stackoverflow上多次提到自动模块,但我找不到自动模块的完整,简洁和自给自足的定义.

那么,什么是自动模块?它是否导出所有包裹?它打开所有包裹吗?它是否读取所有其他模块?

java java-platform-module-system java-9 java-module

23
推荐指数
3
解决办法
4129
查看次数

无法在Java 9中为自动生成的模块名称派生模块描述符?

我的项目依赖于Netty Epoll传输.这是依赖:

<dependency>
    <groupId>io.netty</groupId>
    <artifactId>netty-transport-native-epoll</artifactId>
    <version>${netty.version}</version>
    <classifier>${epoll.os}</classifier>
</dependency>
Run Code Online (Sandbox Code Playgroud)

此依赖项的自动生成的模块名称为:

netty.transport.native.epoll
Run Code Online (Sandbox Code Playgroud)

由于native关键字是在Java 9中保留的,我无法将此模块作为依赖项添加到我的项目中:

module core {
    requires netty.transport.native.epoll;
}
Run Code Online (Sandbox Code Playgroud)

由于:

module not found: netty.transport.<error>
Run Code Online (Sandbox Code Playgroud)

此外,jar工具--describe-module报告以下内容:

无法导出模块描述符:网状输送本地-epoll的-4.1.17.Final-快照Linux的x86_64.jar netty.transport.native.epoll:无效的模块名称:"天然"是不是Java标识符

有没有解决方法?(当然,除了"发布正确的网络工件").

编辑:

作为维护者的快速修复 - 您可以添加下一行来构建:

<manifestEntries>
   <Automatic-Module-Name>netty.transport.epoll</Automatic-Module-Name>
</manifestEntries>
Run Code Online (Sandbox Code Playgroud)

java netty java-9 java-module module-info

19
推荐指数
1
解决办法
6923
查看次数

依赖于外部jar的编译模块

使用 Java 11.0.1中的Project Jigsaw研究了一个简单的示例,该示例是在Ubuntu 18.04上使用oracle JDK 11构建的。

在该示例之后,我创建了一个简单的项目,该项目可编译为模块,将该模块打包到jar中,然后用于jlink创建独立发行版。一切正常-最终结果是一个很小的文件夹,其中包含简化的JRE和我的模块。

该项目仅由三个文件和一些文件夹组成:

.:
build.sh  src

./src:
com  module-info.java

./src/com:
greetings

./src/com/greetings:
Main.java
Run Code Online (Sandbox Code Playgroud)

src / com / greetings / Main.java

package com.greetings;

public class Main {
   public static void main(String[] args) {
      System.out.println("Greetings!");
   }
}
Run Code Online (Sandbox Code Playgroud)

src /模块信息.java

module com.greetings { }
Run Code Online (Sandbox Code Playgroud)

build.sh

#/bin/bash

#clean up from last build
rm -rf greetingsapp mlib mods

#compile
javac -d mods/com.greetings src/module-info.java src/com/greetings/Main.java

#Make module jar
mkdir mlib
jar …
Run Code Online (Sandbox Code Playgroud)

java javac jlink java-module java-11

5
推荐指数
1
解决办法
948
查看次数

如何添加org.eclipse.swt(和其他插件依赖项)作为自动Java9模块?

为了能够将我的Eclipse插件"treezCore"也用作Java9模块,我在src文件夹中创建了一个module-info.java.

此外,我将Plug-in Dependencies从Classpath移动到Modulepath.我可以在插件依赖项中看到一个模块"org.eclipse.swt.3.106.1.v20170926":

在此输入图像描述

但是,我无法在module-info.java中引用该模块.我试过了

require  org.eclipse.swt.3.106.1.v20170926;
require  org.eclipse.swt;
require  swt;
Run Code Online (Sandbox Code Playgroud)

这些选项都没有奏效.Eclipse使用的jar文件\ plugins\org.eclipse.swt_3.106.1.v20170926-0519.jar不包含模块定义,

jar --file org.eclipse.swt_3.106.1.v20170926-0519.jar -d

说无法导出模块描述符.另见

无法在Java 9中为自动生成的模块名称派生模块描述符?

在此输入图像描述

如果我从中下载更新版本的swt.jar

http://download.eclipse.org/eclipse/downloads/drops4/R-4.7.1a-201710090410/download.php?dropFile=swt-4.7.1a-win32-win32-x86_64.zip

我得到以下有希望的输出:

swt automatic
requires java.base mandated
contains org.eclipse.swt
contains org.eclipse.swt.accessibility
contains org.eclipse.swt.awt
contains org.eclipse.swt.browser
contains org.eclipse.swt.custom
contains org.eclipse.swt.dnd
contains org.eclipse.swt.events
contains org.eclipse.swt.graphics
contains org.eclipse.swt.internal
contains org.eclipse.swt.internal.gdip
contains org.eclipse.swt.internal.image
contains org.eclipse.swt.internal.mozilla
contains org.eclipse.swt.internal.mozilla.init
contains org.eclipse.swt.internal.ole.win32
contains org.eclipse.swt.internal.opengl.win32
contains org.eclipse.swt.internal.webkit
contains org.eclipse.swt.internal.win32
contains org.eclipse.swt.layout
contains org.eclipse.swt.ole.win32
contains org.eclipse.swt.opengl
contains org.eclipse.swt.printing
contains org.eclipse.swt.program
contains org.eclipse.swt.widgets
Run Code Online (Sandbox Code Playgroud)

我也依赖于org.eclipse.jface而无法找到它的单独下载.

=>我真的必须等待使用包含模块定义的新插件版本的Eclipse新版本吗?

或者我可以以某种方式从插件文件夹中引用旧版本的swt,即使它不包含模块定义?我寻找一种简单的方法来定义别名或后备依赖,例如

requires ../plugins/org.eclipse.swt_3.106.1.v20170926-0519.jar as 'org.eclipse.swt' …
Run Code Online (Sandbox Code Playgroud)

swt eclipse-plugin eclipse-rcp java-platform-module-system java-9

3
推荐指数
1
解决办法
1699
查看次数