标签: java-module

java 9:在 module-info.java 中,我是否必须再次提及已经在源中导入的包((根据需要)

使用 java 9 模块,如果我在我的代码中使用 java.xml...
1) 我将使用 import 语句导入 xml 包...
2) 如果我没有提到在模块声明中需要这个包我的模块...
-我的模块的编译会起作用吗.. ??
我猜......不......并且提到module-info.java上需要xml包......它可能会起作用。
所以......我想知道的是......这不是冗余......每个导入包都是隐含......必需的。(除非我需要更好地理解模块)

有没有办法提到模块声明中需要所有导入的包,否则在module-info.java中可能会提到一个很长的列表?

java java-9 java-module

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

如何检查罐子是否为多版本

该分离出的最初的问题,我有,假设这是通用就够了。在使用工件之前,如何检查它是否是多版本的jar。

Multi-Release: true
Run Code Online (Sandbox Code Playgroud)

我知道它可以手动寻找到MANIFEST.MFMETA-INF的罐子上面的属性,但有一个命令行选项可用于此?

也许我错过了一些已经存在的其他名称,或者对非常明显的东西视而不见。但是我试图寻找这样的选项jarjava工具,但也没有成功。

java jar manifest java-9 java-module

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

java 9模块的命名约定

什么是Java 9模块的命名约定?假设我的包名是me.jasonyeo.awesome.project,并且每当我module-info.java在IDEA中创建文件时,它都会建议我命名它awesome.project

这是惯例吗?或者我应该说出来me.jasonyeo.awesome.project吗?

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

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

无法在IntelliJ IDEA中运行Java 9项目

我不确定我在这里做错了什么,我开始研究java 10项目(当然使用java 9的新模块系统),所以我怀疑它与此有关.

我有以下项目目录结构:

在此输入图像描述

但是,IntelliJ中的运行按钮显示为灰色,看起来intellij不认为这是一个结构合理的Java项目.

我仔细阅读了文档,但其中很多是循环解释,导致更多的混乱而非清晰度.

我看到.idea目录有一个modules子目录,看起来它包含一些相关的东西 - 我可能在这里做错了,但我不知道是什么.

这是我的build.gradle文件,因为我怀疑这在这里​​很重要:

plugins {
    id 'java'
    id 'application'
    id 'idea'
}

group 'com.chrismailloux'
version '0.1'
description = "Tutorial application developed to learn LWJGL and OpenGL."

sourceCompatibility = 1.8

task wrapper(type: Wrapper) {
    gradleVersion = '4.9'
}

repositories {
    mavenCentral()
}

dependencies {
    // Dependencies left out for brevity
}
Run Code Online (Sandbox Code Playgroud)

有人能把我直接放在这里吗?我该如何解决这个问题才能运行项目?

java intellij-idea gradle java-9 java-module

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

java 10 gradle项目:找不到自动模块

我使用gradle创建了一个带有intelliJ的java 10项目.我复制了一些东西(一些使用库guava和javaFx的"AppFx"类,以及一个个人的build.gradle文件).我还在src/main/java中添加了一个module-info.java文件,其中包含以下内容:

module biblio5.main {
    requires javafx.graphics;
    requires javafx.controls;
    requires javafx.base;
    requires guava;
}
Run Code Online (Sandbox Code Playgroud)

其中grava是一个自动模块.

这是build.gradle的相关部分:

dependencies {
    testCompile group: 'junit', name: 'junit', version: '4.12'
    compile 'com.google.guava:guava:23.0'
}
Run Code Online (Sandbox Code Playgroud)

intelliJ可以编译项目(使用类似锤子的图标)但是当我从intelliJ运行compileJava gradle任务时,我收到一个错误:

13:12:46:执行任务'compileJava'......

任务:compileJava FAILED C:\ Users\lolve\Documents\gradle_java\biblio5\src\main\java\module-info.java:5:错误:找不到模块:guava需要guava; ^ 1错误

我花了很多时间在网上,但没有找到答案.

谢谢

ps:这是整个build.gradle:

buildscript {
    dependencies {
        classpath group: 'de.dynamicfiles.projects.gradle.plugins', name: 'javafx-gradle-plugin', version: '8.8.2'
        classpath 'eu.appsatori:gradle-fatjar-plugin:0.3'
    }
    repositories {

        maven {url "https://mvnrepository.com/artifact/de.dynamicfiles.projects.gradle.plugins/javafx-gradle-plugin"}
        mavenCentral()
        maven { url "https://oss.sonatype.org/content/repositories/snapshots" }
        jcenter()
    }
}


plugins {
    id 'java'
    id 'application'
    id 'edu.sc.seis.launch4j' version '2.4.4'
}
apply …
Run Code Online (Sandbox Code Playgroud)

java intellij-idea gradle guava java-module

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

Java工具用于从jar名称自动派生模块名称的算法

Java 9+工具用于从模块路径上的非模块化jar的名称自动派生模块名称的算法是什么?

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

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

我的模块化库的用户是否可以通过任何方式访问尚未导出的类?

我试图熟悉Java 9中引入的模块系统,我想知道利用它的最佳方法。

对于我正在编写的库,我想执行以下操作(忽略软件包的命名):

  • 通过公开仅接口,简单的POJO类和工厂类com.myproject.api。用户可以使用此类中的所有内容。
  • 将接口的实现放在中com.myproject.core。用户应该无法在此处访问任何内容。

我的理由是,用户无需对实现逻辑感到困惑或不知所措。取而代之的是,他们可以仅查看(希望)干净且记录良好的接口。

但是,由于Java程序包的工作方式,很难在不将所有程序包都私有的情况下限制某些类的使用。但是我不喜欢将所有类都放在一个包中,而是希望将它们组织成各种包。

在阅读了有关模块系统的知识之后,我相信我可以做以下事情来实现我想要的。这是module-info.java文件:

module com.myproject {
    exports com.myproject.api;
}  
Run Code Online (Sandbox Code Playgroud)

据我了解,我的库用户将能够使用com.myproject.api包中定义的所有内容(通过require com.mypojrect.api在其自己的module-info文件中使用)。

但是,用户是否可以通过任何方式访问com.myproject.core软件包中的任何内容?我对他们(通过IDE或源代码本身)查看代码没有问题,但我只是不想最终支持我不想公开的类/方法/逻辑。

我担心没有模块化应用程序的用户或将我的库JAR放在类路径中的用户将以某种方式找到一种方法来访问假定的受限软件包。

如果您需要其他任何信息,请告诉我。

java java-9 java-module

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

是否可以为 Java 11 和 java 模块生成 hibernate 元模型?

我有一个带有 JPA 实体和 persistence.xml 的 java 模块,我想生成元模型。我尝试了两种变体。

变体1

        <plugin>
            <groupId>org.apache.maven.plugins</groupId>
            <artifactId>maven-compiler-plugin</artifactId>
            <version>3.8.1</version>
            <configuration>
                <source>${maven.compiler.source}</source>
                <target>${maven.compiler.target}</target>
                <annotationProcessorPaths>
                        <annotationProcessorPath>
                                <groupId>org.hibernate</groupId>
                                <artifactId>hibernate-jpamodelgen</artifactId>
                                <version>5.4.14.Final</version>
                        </annotationProcessorPath>
                        <path>
                                <groupId>javax.xml.bind</groupId>
                                <artifactId>jaxb-api</artifactId>
                                <version>2.3.0</version>
                        </path>
                        <path>
                                <groupId>javax.annotation</groupId>
                                <artifactId>javax.annotation-api</artifactId>
                                <version>1.3.1</version>
                        </path>
                </annotationProcessorPaths>
            </configuration>
            <dependencies>
            </dependencies>
        </plugin>
Run Code Online (Sandbox Code Playgroud)

结果:

Caused by: java.lang.NullPointerException
    at org.hibernate.jpamodelgen.ClassWriter.writeGeneratedAnnotation(ClassWriter.java:202)
    at org.hibernate.jpamodelgen.ClassWriter.generateBody(ClassWriter.java:100)
    at org.hibernate.jpamodelgen.ClassWriter.writeFile(ClassWriter.java:53)
    at org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor.createMetaModelClasses(JPAMetaModelEntityProcessor.java:145)
    at org.hibernate.jpamodelgen.JPAMetaModelEntityProcessor.process(JPAMetaModelEntityProcessor.java:135)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.callProcessor(JavacProcessingEnvironment.java:972)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.discoverAndRunProcs(JavacProcessingEnvironment.java:888)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment$Round.run(JavacProcessingEnvironment.java:1214)
    at jdk.compiler/com.sun.tools.javac.processing.JavacProcessingEnvironment.doProcessing(JavacProcessingEnvironment.java:1326)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.processAnnotations(JavaCompiler.java:1258)
    at jdk.compiler/com.sun.tools.javac.main.JavaCompiler.compile(JavaCompiler.java:936)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.lambda$doCall$0(JavacTaskImpl.java:104)
    at jdk.compiler/com.sun.tools.javac.api.JavacTaskImpl.handleExceptions(JavacTaskImpl.java:147)
    ... 28 more
Run Code Online (Sandbox Code Playgroud)

变体2

    <plugin>
        <groupId>org.bsc.maven</groupId>
        <artifactId>maven-processor-plugin</artifactId>
        <version>3.3.3</version>
        <executions>
            <execution>
                <goals>
                    <goal>process</goal>
                </goals>
                <phase>generate-sources</phase> …
Run Code Online (Sandbox Code Playgroud)

java hibernate jpa metamodel java-module

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

SecurityManager 弃用和通过抑制访问检查进行反射

我是一名大学讲师,我正在修改关于 Java 反射的讲座。其他几年,当我讲授抑制访问检查的可怕之处时,我向您展示了您可以设置一个 SecurityManager 并执行类似的操作

    if ("suppressAccessChecks".equals(p.getName())){
      StackTraceElement[] st = Thread.currentThread().getStackTrace();
      if(.. st ..) { throw new SecurityException(); }
    }
Run Code Online (Sandbox Code Playgroud)

通过这种方式,您可以允许列入白名单的反序列化器仅调用suppressAccessChecks。然而,现在他们正在弃用 SecurityManager。我认为新的模块系统应该在这里有所帮助,但我找不到解释如何支持上面白名单反序列化器的想法的资源。

有什么提示吗?

java-module java-security-manager java-19

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

在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
查看次数