当我尝试使用 Maven 编译项目时,出现以下错误:
[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project webserverlog: Compilation failure
[ERROR] No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
[ERROR] -> [Help 1]
org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:3.1:compile (default-compile) on project webserverlog: Compilation failure
No compiler is provided in this environment. Perhaps you are running on a JRE rather than a JDK?
Run Code Online (Sandbox Code Playgroud)
我的 JAVA_HOME 指向 JDK:
$ echo $JAVA_HOME
/System/Library/Frameworks/JavaVM.framework/Versions/CurrentJDK/Home
$ $JAVA_HOME/bin/javac -version
javac …Run Code Online (Sandbox Code Playgroud) 我正在使用mockito-core:2.8.47andJava 7并希望在 when 和 verifyanyListOf或其他任何方法中使用。我的问题是,如果我只是使用anyList它说:
类型 Y 中的方法名称 ( int, List < List < String >>) 不适
用于参数 ( int, List < Object > )
我怎样才能解决这个问题?
ArgumentMatchers.anyListOf(ArgumentMatchers.anyListOf( String.class ) )不起作用...
我在使用不同 Java 版本的应用程序环境中工作:7、8 和更高版本。开发人员因此安装了几个 JDK,每个 Maven pom.xml 确实有正确的<source>和<target>标签。但是,有时开发人员会无意中使用更高版本的 JDK 进行编译。所以它们可能包含一个 Java 8 类,就像java.time.LocalDate在 Java 7 中一样,它会编译,因为它能够在编译时解析导入。但是,当应用程序稍后移动到在 JRE 7 上运行时,它将失败,因为它无法找到 Java 8 类。可以在 pom.xml 中创建一个配置文件,如:
<profile>
<id>compiler</id>
<properties>
<JAVA_1_4_HOME>C:\Program Files\Java\j2sdk1.4.2_09</JAVA_1_4_HOME>
</properties>
</profile>
Run Code Online (Sandbox Code Playgroud)
但是,JDK 的位置因开发人员而异,我想要一个对每个人都通用的 pom.xml。
所以问题是,如何强制 Maven 使用给定的 JDK 版本?不仅<source>和<target>JDK 本身,而且以一种通用的方式不绑定到任何给定的计算机。
我在尝试运行使用 javax.xml.namespace.QName 属性从 wsdl 自动生成的 Java 类时遇到问题,它在 Java 7 中正常工作,但在更改版本时它停止识别。pom.xml
<dependency>
<groupId>com.fasterxml.jackson.core</groupId>
<artifactId>jackson-databind</artifactId>
<version>${jackson.version}</version>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>jstl</artifactId>
<version>${servlet.jstl.version}</version>
<scope>runtime</scope>
</dependency>
<dependency>
<groupId>javax.servlet</groupId>
<artifactId>servlet-api</artifactId>
<version>${servlet.version}</version>
<scope>provided</scope>
</dependency>
<dependency>
<groupId>org.thymeleaf</groupId>
<artifactId>thymeleaf</artifactId>
<version>3.0.9.RELEASE</version>
</dependency>
<dependency>
<groupId>javax.xml.stream</groupId>
<artifactId>stax-api</artifactId>
<version>1.0-2</version>
</dependency>
<dependency>
<groupId>org.codehaus.jackson</groupId>
<artifactId>jackson-mapper-asl</artifactId>
<version>1.9.8</version>
<!--<scope>provided</scope>-->
</dependency>
<dependency>
<groupId>com.thoughtworks.xstream</groupId>
<artifactId>xstream</artifactId>
<version>1.4.2</version>
<!--<scope>provided</scope>-->
</dependency>
<!-- POI -->
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi</artifactId>
<version>3.13</version>
<!--<scope>provided</scope>-->
<exclusions>
<exclusion>
<groupId>commons-codec</groupId>
<artifactId>commons-codec</artifactId>
</exclusion>
</exclusions>
</dependency>
<dependency>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml</artifactId>
<version>3.9</version>
<!--<scope>provided</scope>-->
<exclusions>
<exclusion>
<groupId>org.apache.poi</groupId>
<artifactId>poi-ooxml-schemas</artifactId>
</exclusion>
<exclusion>
<groupId>org.apache.xmlbeans</groupId>
<artifactId>xmlbeans</artifactId>
</exclusion>
<exclusion>
<groupId>stax</groupId> …Run Code Online (Sandbox Code Playgroud) 根据Maven 发布历史,应该可以在 JDK 7 上运行任何最新版本的 Maven(在撰写本文时)。但是,当我尝试在 Ubuntu 21.04 机器上执行此操作时,出现错误: java.lang.UnsupportedClassVersionError: com/google/inject/Module : Unsupported major.minor version 52.0.
即使在mvn不包含任何 Java 文件或pom.xml文件的目录中不带任何参数运行时也会发生这种情况。
马文信息:
??? mvn -version
Apache Maven 3.6.3
Maven home: /usr/share/maven
Java version: 1.7.0_80, vendor: Oracle Corporation, runtime: /home/jqno/.jabba/jdk/1.7.80-oracle/jre
Default locale: en_US, platform encoding: UTF-8
OS name: "linux", version: "5.11.0-16-generic", arch: "amd64", family: "unix"
Run Code Online (Sandbox Code Playgroud)
(我还安装了 Zulu 1.7.292 和 OpenJDK;那里的行为是相同的。)
完整的堆栈跟踪:
??? mvn clean
---------------------------------------------------
constituent[0]: file:/usr/share/maven/conf/logging/
constituent[1]: file:/usr/share/maven/lib/commons-lang3.jar
constituent[2]: file:/usr/share/maven/lib/sisu-plexus.jar
constituent[3]: file:/usr/share/maven/lib/maven-core-3.x.jar
constituent[4]: file:/usr/share/maven/lib/maven-shared-utils.jar
constituent[5]: …Run Code Online (Sandbox Code Playgroud) 我在使用官方Maven插件和Java 7与Google Appengine时遇到了麻烦.
我的项目配置pom.xml非常简单:
在我配置的属性部分中:
<gae.version>1.7.4</gae.version>
Run Code Online (Sandbox Code Playgroud)
后来我使用插件:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<source>1.7</source>
<target>1.7</target>
</configuration>
</plugin>
<plugin>
<groupId>com.google.appengine</groupId>
<artifactId>appengine-maven-plugin</artifactId>
<version>${gae.version}</version>
</plugin>
Run Code Online (Sandbox Code Playgroud)
每当我运行时,mvn appengine:update我都会收到以下错误:
无法更新应用程序:应用程序包含Java 7类,但尚未设置--use_java7标志.
当然,我试图解决这个问题.运行
mvn appengine:update --use_java7
Run Code Online (Sandbox Code Playgroud)
要么
mvn appengine:update -D--use_java7
Run Code Online (Sandbox Code Playgroud)
没有帮助,因为该标志不用于Maven插件,而是用于appcfg脚本.
如何将标志传递给脚本,以便我可以使用Java 7(或者我还能做什么)?
我看到很多的例子使用Files.walkFileTree()的目录及其内容从一个位置复制到另一个,但他们不采取目录的文件属性和权限考虑.意思是,他们只是调用Files.createDirectories()而没有任何属性或权限.
如何使用Java7核心类将目录(及其内容)从一个位置复制到另一个位置而不丢失文件属性或权限?
这是我的配置
cat /etc/environment
PATH="/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games"
JAVA_HOME="/lib/jvm/java-7-oracle/jre/bin/java"
~$whereis java
java: /usr/bin/java /usr/bin/X11/java /usr/share/java /usr/share/man/man1/java.1.gz
~$ which java
/usr/bin/java
~$ ls -l /usr/bin/java
lrwxrwxrwx 1 root root 22 Aug 23 14:40 /usr/bin/java -> /etc/alternatives/java
~$ ls -l /etc/alternatives/java
lrwxrwxrwx 1 root root 39 Aug 23 14:40 /etc/alternatives/java -> /usr/lib/jvm/java-7-oracle/jre/bin/java
Run Code Online (Sandbox Code Playgroud)
我读了这个以产生上面的输出.我不断收到我Hello.java文件上的红色Intellij IDEA图标,内容为:
public class Hello {
public static void main(String[] args){
System.out.println("Hello World");
}
}
Run Code Online (Sandbox Code Playgroud)
尽管从命令行成功运行程序如下:
$ javac Hello.java
$ java Hello
Hello World
Run Code Online (Sandbox Code Playgroud)
以下是在Intellij IDEA设置上设置的Java SDK路径(Ctrl + …
我很沮丧地看到以下行为,并且在研究之后还不确定如何解决这个问题.我有两个单独的项目,一个仅适用于Java 7(无法更新到Java 8),另一个项目适用于Java 8(无法降级到7).所以我在我的Windows机器上安装了Java 7和8.
所以,我经常看到以下行为.目前我在Java 8上并希望切换回Java 7,因此我将环境变量JAVA_HOME和PATH更改为指向Java 7,但是当我通过CMD进行验证时,它会向我显示以下内容.
C:\>java -version
java version "1.8.0_45"
Java(TM) SE Runtime Environment (build 1.8.0_45-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
C:\>javac -version
javac 1.7.0_71
Run Code Online (Sandbox Code Playgroud)
我不能使用上面的组合,这两个项目都不适合我.因此,我总是需要卸载Java 8,然后才能指向Java 7.此外,如果我想回到Java 8(再次安装Java 8),那么它会向我显示以下组合.如何在Windows上修复此错误?因为每次卸载JDK都不是解决方案.请帮我.
C:\>java -version
java version "1.7.0_71"
Java(TM) SE Runtime Environment (build 1.7.0_71-b15)
Java HotSpot(TM) 64-Bit Server VM (build 25.45-b02, mixed mode)
C:\>javac -version
javac 1.8.0_45
Run Code Online (Sandbox Code Playgroud) 我目前正在修改Java se7认证,任何完成这些考试的人都知道他们使用的一些代码示例是多么荒谬.故意编写难以理解的代码.最近我看到很多代码写得像这样:
Object obj=new Animal();
Run Code Online (Sandbox Code Playgroud)
这提供了什么好处?我知道这是有效的代码,但这只是你在考试中不会使用大量代码的其中一项吗?如果不是何时以及为什么要这样做?