相关疑难解决方法(0)

如何将模块声明注入JAR?

假设我有一些lib.jar我没有源代码的库(或者它是用一些不熟悉模块的非Java语言编写的).lib.jar没有module-info.class,我不想将它用作自动模块,所以我想注入module-info.class它.

我首先module-info.java使用以下命令生成:

jdeps --generate-module-info . lib.jar
Run Code Online (Sandbox Code Playgroud)

假设这产生了类似的东西:

module lib {
    exports package1;
    exports package2;
}
Run Code Online (Sandbox Code Playgroud)

然后我尝试编译它但javac失败因为包package1而且package2不存在:

> javac module-info.java
module-info.java:4: error: package is empty or does not exist: package1
Run Code Online (Sandbox Code Playgroud)

当然,我可以在其中创建目录package1package2虚拟类,但是有更好的方法吗?

java java-9 java-module module-info

13
推荐指数
2
解决办法
2251
查看次数

将jlink与自动模块一起使用

具有依赖于自动模块的显式模块化项目,例如,依赖于java.activation。仍然可以使用jlink吗?

请参阅以下module-info.java:

module hello {
    requires java.activation;
}
Run Code Online (Sandbox Code Playgroud)

然后,Jlink无法添加模块:

$ jlink --module-path target/modules --add-modules hello --output target/jlink
Error: automatic module cannot be used with jlink: java.activation from file:///C:/Development/jlinkExample/target/modules/javax.activation-api-1.2.0.jar
Run Code Online (Sandbox Code Playgroud)

根据我的理解,自动模块无论如何都将包含整个类路径,所以我猜想用jlink创建运行时映像没有好处吗?另请参阅:什么是自动模块?

有没有可能解决这个问题的方法,也许为那些依赖项生成一个模块信息?

java jlink java-platform-module-system

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

在java 9中使用jdeps为自动模块创建module-info

我有3罐杰克逊图书馆

  1. 杰克逊核心2.8.10.jar
  2. 杰克逊的注解 - 2.8.0.jar
  3. 杰克逊 - 数据绑定,2.8.10.jar

我成功地为core和annotation创建了module-info.java,并使用jdeps将它们转换为Named maodule.

对于数据绑定,我尝试了以下命令:

jdeps --generate-module-info.--module-path%JAVA_HOME%\ jomds; jackson.core; jackson.annotations existingmods\jackson-databind-2.8.10.jar

现在发生以下错误:

Missing dependence: .\jackson.databind\module-info.java not generated
Error: missing dependencies
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonCreator       not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonCreator$Mode  not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonFormat        not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonFormat$Value  not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonIgnoreProperties not found
   com.fasterxml.jackson.databind.AnnotationIntrospector -> com.fasterxml.jackson.annotation.JsonIgnoreProperties$Value not found.
Run Code Online (Sandbox Code Playgroud)

如何为jackson-databind生成module-info.java?

jar java-9 jdeps java-module

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

带有moditect和Java 11的JavaFX Maven

根据是否有一种方法在使用maven-jlink-plugin时添加maven依赖项? 有没有人在Java 11中使用带有JavaFX的ModiTect Maven插件.我尝试使用maven-jlink-plugin:

 <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jlink-plugin</artifactId>
    <version>3.0.0-alpha-1</version>
    <extensions>true</extensions>
    <dependencies>
        <dependency>
            <groupId>org.ow2.asm</groupId>
            <artifactId>asm</artifactId>
            <version>6.2</version> <!-- Use newer version of ASM -->
        </dependency>
    </dependencies>
</plugin>            
Run Code Online (Sandbox Code Playgroud)

但得到了:

--- maven-jlink-plugin:3.0.0-alpha-1:jlink (default-jlink) @ test33 ---
Toolchain in maven-jlink-plugin: jlink [ C:\Program Files\Java\jdk-11\bin\jlink.exe ]
The following dependencies will be linked into the runtime image:
 -> module: javafx.controlsEmpty ( C:\Users\md\.m2\repository\org\openjfx\javafx-controls\11-ea+25\javafx-controls-11-ea+25.jar )
 -> module: javafx.controls ( C:\Users\md\.m2\repository\org\openjfx\javafx-controls\11-ea+25\javafx-controls-11-ea+25-win.jar )
 -> module: javafx.graphicsEmpty ( C:\Users\md\.m2\repository\org\openjfx\javafx-graphics\11-ea+25\javafx-graphics-11-ea+25.jar )
 -> module: javafx.graphics ( C:\Users\md\.m2\repository\org\openjfx\javafx-graphics\11-ea+25\javafx-graphics-11-ea+25-win.jar )
 -> module: javafx.baseEmpty ( C:\Users\md\.m2\repository\org\openjfx\javafx-base\11-ea+25\javafx-base-11-ea+25.jar …
Run Code Online (Sandbox Code Playgroud)

javafx jlink maven moditect java-11

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

如何使用javapackager查找自动模块

我正在捆绑一个app,javapackager其中主jar是一个带有module-info.class的模块,但它依赖于许多其他普通旧jar的jar,所以我把它们称为module-info.java中的自动模块.然而,javapackager抱怨无法找到它们.如何让它找到自动模块的jar文件?

Exception: jdk.tools.jlink.plugin.PluginException: java.lang.module.FindException: Module rcf not found, required by com.username.commander.ui
Exception in thread "main" com.sun.javafx.tools.packager.PackagerException: Error: Bundler "Mac Application Image" (mac.app) failed to produce a bundle.
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateNativeBundles(PackagerLib.java:374)
    at jdk.packager/com.sun.javafx.tools.packager.PackagerLib.generateDeploymentPackages(PackagerLib.java:348)
    at jdk.packager/com.sun.javafx.tools.packager.Main.main(Main.java:496)
Run Code Online (Sandbox Code Playgroud)

我已经尝试指定模块路径(第一个dir只有主模块jar,第二个dir有所有非模块jar):

/Library/Java/JavaVirtualMachines/jdk-9.0.1.jdk/Contents/Home/bin/javapackager -deploy -native image \
-name Commander -title Commander -vendor "username" \
--module-path /Users/username/Dropbox/coding/commander/Commander-java/moduleJars:/Users/username/Dropbox/coding/commander/Commander-java/packageJars \
--module com.username.commander.ui/com.username.commander.ui.AppWindow \
-srcdir /Users/username/Dropbox/coding/commander/Commander-java/packageJars \
-outdir /Users/username/Dropbox/coding/commander/Commander-java/target \
-outfile Commander \
-Bruntime=target/jre-9.0.1 -Bicon=src/main/resources/icons/commander.icns \
-BappVersion=1.0 \
-Bmac.CFBundleIdentifier=com.username.Commander \
--add-modules java.base,java.desktop,java.naming,java.sql,java.xml,java.logging,java.management,java.scripting,java.compiler,java.rmi,java.activation \
--limit-modules java.base,java.desktop,java.naming,java.sql,java.xml,java.logging,java.management,java.scripting,java.compiler,java.rmi,java.activation \
-nosign -v
Run Code Online (Sandbox Code Playgroud)

java java-9 javapackager

5
推荐指数
2
解决办法
1433
查看次数

依赖于外部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
查看次数

如何从maven依赖项构建java 9依赖项

Java9引入了类似于OSGI和Maven Dependecies的强大模块性.

是否有maven插件能够构建检测maven依赖项的java 9依赖项?

例如,来自

<groupId>com.mycompany.app</groupId>
<artifactId>my-module</artifactId>
....
<dependency>
    <groupId>com.google.guava</groupId>
    <artifactId>guava</artifactId>
    <version>23.3-jre</version>
</dependency>
Run Code Online (Sandbox Code Playgroud)

module my-module{
    requires com.google.guava;
    exports com.mycompany.app; 
}
Run Code Online (Sandbox Code Playgroud)

我已经阅读了这篇文章,但它没有那么有用 - 如何表达maven对java ee功能的依赖以转换到Java 9?

java modularity maven java-9 module-info

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