使用 java 9 模块,如果我在我的代码中使用 java.xml...
1) 我将使用 import 语句导入 xml 包...
2) 如果我没有提到在模块声明中需要这个包我的模块...
-我的模块的编译会起作用吗.. ??
我猜......不......并且提到module-info.java上需要xml包......它可能会起作用。
所以......我想知道的是......这不是冗余......每个导入包都是隐含......必需的。(除非我需要更好地理解模块)
有没有办法提到模块声明中需要所有导入的包,否则在module-info.java中可能会提到一个很长的列表?
该分离出的最初的问题,我有,假设这是通用就够了。在使用工件之前,如何检查它是否是多版本的jar。
Multi-Release: true
Run Code Online (Sandbox Code Playgroud)
我知道它可以手动寻找到MANIFEST.MF内META-INF的罐子上面的属性,但有一个命令行选项可用于此?
也许我错过了一些已经存在的其他名称,或者对非常明显的东西视而不见。但是我试图寻找这样的选项jar和
java工具,但也没有成功。
什么是Java 9模块的命名约定?假设我的包名是me.jasonyeo.awesome.project,并且每当我module-info.java在IDEA中创建文件时,它都会建议我命名它awesome.project
这是惯例吗?或者我应该说出来me.jasonyeo.awesome.project吗?
我不确定我在这里做错了什么,我开始研究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)
有人能把我直接放在这里吗?我该如何解决这个问题才能运行项目?
我使用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 9+工具用于从模块路径上的非模块化jar的名称自动派生模块名称的算法是什么?
我试图熟悉Java 9中引入的模块系统,我想知道利用它的最佳方法。
对于我正在编写的库,我想执行以下操作(忽略软件包的命名):
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放在类路径中的用户将以某种方式找到一种方法来访问假定的受限软件包。
如果您需要其他任何信息,请告诉我。
我有一个带有 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 反射的讲座。其他几年,当我讲授抑制访问检查的可怕之处时,我向您展示了您可以设置一个 SecurityManager 并执行类似的操作
if ("suppressAccessChecks".equals(p.getName())){
StackTraceElement[] st = Thread.currentThread().getStackTrace();
if(.. st ..) { throw new SecurityException(); }
}
Run Code Online (Sandbox Code Playgroud)
通过这种方式,您可以允许列入白名单的反序列化器仅调用suppressAccessChecks。然而,现在他们正在弃用 SecurityManager。我认为新的模块系统应该在这里有所帮助,但我找不到解释如何支持上面白名单反序列化器的想法的资源。
有什么提示吗?
我试图在教程之后使用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:没有源文件.路径错了还是我应该输入不同的命令?