标签: java-9

其中一个--module-version或--hash-dependencies没有module-info.class错误在jdk 9中打包为jar时

我正在探索Project Jigsaw @ JDK 9,几乎所有Java开发人员都在考虑Oracle如何为Java 9带来模块化.

我已经创建了一个示例java项目,代码编译没有任何错误.

下面是生成的字节码文件及其结构

$ tree mods/dictionary.spi/
mods/dictionary.spi/
??? dictionary
?   ??? DictionaryService.class
?   ??? spi 
?       ??? Dictionary.class
??? module-info.class
2 directories, 3 files
Run Code Online (Sandbox Code Playgroud)

我尝试为上面的类文件创建jar文件,如下所述.

$ /opt/jigsaw-jdk-9/bin/jar --create --file lib/dictionaryspi.jar --module-version=1.0 mods/dictionary.spi/ .
Run Code Online (Sandbox Code Playgroud)

没有module-info.class的--module-version或--hash-dependencies之一

非常感谢,如果有人为这个错误提供了最佳解决方案.

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

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

在java 9中创建模块项目的问题

我试图在教程之后使用Windows 10中的java命令设置一个基本的java项目.文件是

C:\Users\Talon\Desktop\java intellij\01j9\src\com.me.mymodule\module-info.java C:\Users\Talon\Desktop\java intellij\01j9\src\com.me.mymodule\com\me\mymodule\Main.java

和一个空文件夹C:\Users\Talon\Desktop\java intellij\01j9\mods\com.me.mymodule.

module-info.java

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

Main.java

package com.me.mymodule;
public class Main {
    public static void main(String[] args) {
        System.out.println("Hello World from Module");
    }
}
Run Code Online (Sandbox Code Playgroud)

在'cd'进入C:\Users\Talon\Desktop\java intellij\01j9> 我应该进入的命令之后

javac -d mods/com.me.mymodule \ src/com.me.mymodule/module-info.java \ src/com.me.mymodule/com/me/mymodule/Main.java
Run Code Online (Sandbox Code Playgroud)

但它是为machintosh操作系统编写的,所以在windows中我尝试过

javac -d mods/com.me.mymodule;src/com.me.mymodule/module-info.java;src/com.me/mymodule/com/me/mymodule/Main.java
Run Code Online (Sandbox Code Playgroud)

javac -d mods\com.me.mymodule;src\com.me.mymodule\module-info.java;src\com.me\mymodule\com\me\mymodule\Main.java
Run Code Online (Sandbox Code Playgroud)

在两个我有javac:没有源文件.路径错了还是我应该输入不同的命令?

java java-9 java-module

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

Java 9 webstart JNLP Service生成IllegalAccess

以下代码(通过JNLP API检索Java Web Start客户端应用程序的基本URL)在Java 8中工作,但在(模块化)Java 9运行时中执行时失败:

Class<?> mclass = Class.forName("javax.jnlp.ServiceManager");
Method lookup = mclass.getMethod("lookup", new Class[]{String.class});
Object basicSvc = lookup.invoke(null, new Object[{"javax.jnlp.BasicService"});
Class<?> sclass = basicSvc.getClass();
Method getCodeBase = sclass.getMethod("getCodeBase", (Class[])null);
URL codebase = (URL)getCodeBase.invoke(basicSvc, (Object[])null); // throws
Run Code Online (Sandbox Code Playgroud)

结果是

java.lang.IllegalAccessException: class app.App cannot access class
  com.sun.jnlp.BasicServiceImpl (in module jdk.javaws) because module
  jdk.javaws does not export com.sun.jnlp to unnamed module @7202a0fa
    at java.base/jdk.internal.reflect.Reflection.newIllegalAccessException
    at java.base/java.lang.reflect.AccessibleObject.checkAccess
    at java.base/java.lang.reflect.Method.invoke
    at app.App.init
Run Code Online (Sandbox Code Playgroud)

怎么解决这个问题?

java reflection jnlp java-platform-module-system java-9

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

有没有办法让Java 9停止抱怨无法访问的软件包?

我正在切换到Java 9(用于HTTP/2客户端,以及其他好处),但不打算使用Java 9模块化.

关于无法访问的软件包,我遇到了大量的编译器错误.每个都要求我添加一个额外的--add-exports modulename/packagename=ALL-UNNAMED编译器标志.

是否有一些编译器标志,我可以指定,一次,添加所有导出,而不是再得到编译器错误?

以下是显示问题的示例代码:

package com.prosc.fx;

import com.sun.javafx.stage.WindowHelper;

public class CompilerFlagTest {
    public static void main(String[] args) {
        WindowHelper.getWindowAccessor();
    }
}
Run Code Online (Sandbox Code Playgroud)

错误消息是:

错误:(3,22)java:package com.sun.javafx.stage不可见(包com.sun.javafx.stage在模块javafx.graphics中声明,它不会将其导出到未命名的模块)

java-platform-module-system java-9

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

SHP开头:数据存储区DataStoreFactorySpi不是ImageIO SPI类

在学校,我必须创建一个API,在其中我需要一个shapefile内的几何图形。我使用geotools librairie打开shapefile。这是我的代码:

public class main {

    public static void main(String[] args) throws Exception{
        String filepath = "SHP_test/testSHPindex.shp";
        File shp = new File(filepath);

        Map<String, URL> map = new HashMap<String, URL>();
        map.put( "url", shp.toURI().toURL() );
        DataStore dataStore = DataStoreFinder.getDataStore(map);


        SimpleFeatureSource featureSource = dataStore.getFeatureSource(dataStore.getTypeNames()[0]);        
        SimpleFeatureCollection collection = featureSource.getFeatures();


}
Run Code Online (Sandbox Code Playgroud)

我得到这个错误:

Exception in thread "main" java.lang.IllegalArgumentException: org.geotools.data.DataStoreFactorySpi is not an ImageIO SPI class
    at java.desktop/javax.imageio.spi.ServiceRegistry.checkClassAllowed(ServiceRegistry.java:745)
    at java.desktop/javax.imageio.spi.ServiceRegistry.<init>(ServiceRegistry.java:140)
    at org.geotools.factory.FactoryRegistry.<init>(FactoryRegistry.java:155)
    at org.geotools.factory.FactoryCreator.<init>(FactoryCreator.java:91)
    at org.geotools.data.DataStoreFinder.getServiceRegistry(DataStoreFinder.java:128)
    at org.geotools.data.DataStoreFinder.getAvailableDataStores(DataStoreFinder.java:115)
    at org.geotools.data.DataStoreFinder.getDataStore(DataStoreFinder.java:87)
    at org.ensg.projetperso.llb.maven.api.spatialindexingtest.testshapefile.main.main(main.java:30)
Run Code Online (Sandbox Code Playgroud)

数据存储区不希望被创建,我不知道它是从哪里来的……您能帮我吗?提前致谢 ..

劳尔

java datastore shapefile javax.imageio java-9

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

Java 9嵌套(分层或父/子)模块

是否可以在Java 9中创建基于继承的(或嵌套的)模块?

像这样的东西:

module a
   |
   ??? module a1
   |   
   ??? module a2
Run Code Online (Sandbox Code Playgroud)

在这个例子中,a1a2模块都是子项a.

如果我导入其中一个子模块,我将获得parent(a)的功能以及该子项中定义的任何功能.也就是说,我可以导入a1,并明确访问两者的功能aa1(但不包括a2).

这两个a1a2是一个a,并且可以访问所有的包a,而无需的包揭露a他们.

java java-9

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

Java 9是否包含内置JSON?

我想知道Java 9是否内置了对JSON的支持.如果是这样我怎么能导入它?我正在编写一个套接字程序,所以我不是在谈论Java EE,我要导入的目标是一个简单的Java SE类.

java json java-9

1
推荐指数
2
解决办法
3366
查看次数

跨模块拆分的 Java 9 子包

在 Java 9 中,我可以跨模块拆分子包吗?例如,我可以com.example.foo在一个模块中同时com.example.foo.bar在另一个模块中吗?

这似乎是一个简单的问题,但由于某种原因,我在搜索后无法找到直接答案。权威的参考将不胜感激。

我假设我可以在不同的模块中拥有同级子包,例如com.example.foocom.example.other

java java-9 java-module

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

Java 平台模块系统 - 保护的重点是什么?

我读过 JPMS 的优点之一是更好的封装(除非明确打开,否则所有内容都受到限制)。

但我有一个问题:是什么阻止了程序员替换module-info.class第三方模块 JAR 并导出所有包,甚至制作open模块,因此所有内容都可以通过反射(包括private成员)访问。

JPMS 是否真的可以帮助隐藏内部代码,或者就像 Java 8 及更早版本一样:所有内容都可以通过反射 API 访问,甚至是private成员(从 Java 9 开始只需要额外的步骤来打开模块)?

java-platform-module-system java-9

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

Java 9 模块名称中不允许使用哪些字符?

JPMS 模块名称中不允许使用破折号。据我了解,建议用点替换它们。

但是,我找不到带有替换建议的 Java 模块名称中其他不允许的字符的列表。例如,是否允许使用“_”字符?

java java-9 java-module

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