我想分享我通过代理使用maven的经验.
您很可能会遇到异常和消息,例如:
repository metadata for: 'org.apache.maven.plugins' could not be retrieved from repository: central due to an error: Error transferring file: Connection refused: connect
要么
[WARNING] Failed to retrieve plugin descriptor for org.apache.maven.plugins:maven-clean- plugin:2.5: Plugin org.apache.maven.plugins:maven-clean-plugin:2.5 or one of its dependencies could not be resolved: Failed to read artifact descriptor for org.apache.maven.plugins:maven-clean-plugin:jar:2.5
如何配置Maven使用代理服务器?
我认为在_JAVA_OPTIONS和之间进行比较会很棒JAVA_TOOL_OPTIONS.我一直在寻找一个,但我找不到任何东西,所以我希望我们能在Stackoverflow上找到这方面的知识.
JAVA_OPTS包括完整性.它不是JVM的一部分,但在野外有很多问题.
到目前为止,我发现:
JAVA_OPTSJDK不使用它,而是由许多其他应用程序使用(请参阅此文章).JAVA_TOOL_OPTIONS并且_JAVA_OPTIONS是将JVM参数指定为环境变量而不是命令行参数的方法.
java和javac_JAVA_OPTIONS (覆盖其他人)JAVA_TOOL_OPTIONS (被其他人覆盖)JAVA_TOOL_OPTIONS和_JAVA_OPTIONSJAVA_TOOL_OPTIONS和之间是否存在任何其他差异_JAVA_OPTIONS(优先级除外).JAVA_TOOL_OPTIONS和_JAVA_OPTIONS(除了java和javac)JAVA_TOOL_OPTIONS和_JAVA_OPTIONS我找不到任何关于的文档_JAVA_OPTIONS.该文件JAVA_TOOL_OPTIONS没有说明差异:
由于无法始终访问或修改命令行,例如在嵌入式VM中或仅在脚本内深入启动的VM,因此提供了JAVA_TOOL_OPTIONS变量,以便在这些情况下可以启动代理.
...
这是我用来解决这个问题的代码.控制台输出包含在注释中:
export JAVA_OPTS=foobar
export JAVA_TOOL_OPTIONS=
export _JAVA_OPTIONS="-Xmx512m -Xms64m"
java -version
# Picked up JAVA_TOOL_OPTIONS:
# Picked up _JAVA_OPTIONS: -Xmx512m -Xms64m
# …Run Code Online (Sandbox Code Playgroud) 如何通过环境变量设置Java的最小和最大堆大小?
我知道在启动java时可以设置堆大小,但我希望在服务器上通过环境变量进行调整.
是否可以在Spring Boot应用程序中单独通过环境变量设置日志记录级别?
我不想使用,application.properties因为我在Cloud Foundry上运行并希望在没有部署的情况下获取更改(但在应用程序重新启动后,或者重新开始更精确).
我已经尝试设置env vars,LOGGING_LEVEL_ORG_SPRINGFRAMEWORK=TRACE但这没有效果.把logging.level.org.springframework: TRACE在application.properties做的工作,虽然.
Java 1.7在从操作系统获取默认语言环境的方式上发生了变化.有一些方法可以恢复旧行为,例如在启动JVM实例时设置标志-Dsun.locale.formatasdefault = true.
我想永久设置这个标志,这样我每次启动JVM实例时都不必在命令行参数中指定它.是否有文件或任何其他可能更改JVM的默认设置?像Eclipse.ini文件,但JVM本身?
我正在使用JRE 1.7,我发现user.homeSystem属性非常不寻常.JVM如何设置此值?
使用Java 11时,JDK_JAVA_OPTIONS和JAVA_TOOL_OPTIONS之间的确切区别是什么?
它们似乎执行相同的操作,但是输出略有不同。这使我相信他们可能有不同的用例:
$ JDK_JAVA_OPTIONS="-Dstuff" java Foo
NOTE: Picked up JDK_JAVA_OPTIONS: -Dstuff
$ JDK_JAVA_OPTIONS="illegalStuff" java Foo
NOTE: Picked up JDK_JAVA_OPTIONS: illegalStuff
Error: Cannot specify main class in environment variable JDK_JAVA_OPTIONS
$ JAVA_TOOL_OPTIONS="-Dstuff" java Foo
Picked up JAVA_TOOL_OPTIONS: -Dstuff
$ JAVA_TOOL_OPTIONS="illegalStuff" java Foo
Picked up JAVA_TOOL_OPTIONS: illegalStuff
Unrecognized option: illegalStuff
Error: Could not create the Java Virtual Machine.
Error: A fatal exception has occurred. Program will exit.
Run Code Online (Sandbox Code Playgroud)
我正在使用一个很小的测试程序:
public class Yo {
public static final void main(String[] …Run Code Online (Sandbox Code Playgroud) 我注意到Windows上的Java环境(通过System.getenv()调用获得)包含一些在真实环境中不存在的变量.这些以&equals-sign开头并包含"= ExitCode",它映射到在此java invokation之前运行的进程的退出代码; 以及各种驱动器号的默认目录,例如"= C:","= D:".在所有Windows版本上运行的所有Sun Java版本似乎都是这种情况.这是在任何地方记录的,还是纯粹仅供Sun内部使用?
编辑 这是一个简单的示例应用程序来显示我的意思.在命令行上编译并运行它:
import java.util.Map;
class ShowEnv {
public static void main(String[] args) {
for (Map.Entry v : System.getenv().entrySet())
System.out.printf("%-23s= %.54s%n", v.getKey(), v.getValue());
}
}
Run Code Online (Sandbox Code Playgroud)
然后将变量与SET命令(来自cmd.exe)或用C编写的类似命令行程序进行比较.您将发现以=开头的变量不存在于:
=ExitCode = 00000000 =:: = ::\ =C: = C:\Temp
这些变量显然是在执行JVM期间添加的.
以下代码将有助于说明我的问题:
import java.util.Locale;
import java.text.*;
public class LocaleTest {
public static void main(String[] args) {
System.out.println(Locale.getDefault());
System.out.println("java-version-" +System.getProperty("java.version"));
System.setProperty("sun.locale.formatasdefault","true");
System.out.println("prop:" +System.getProperty("sun.locale.formatasdefault"));
System.out.println("getLocale-" +Locale.getDefault());
}
}
Run Code Online (Sandbox Code Playgroud)
我们知道,在Java 7中,Locale.getDefault()中存在错误.但是,正如Oracle所建议的那样,我将系统属性"sun.locale.formatasdefault"设置为true.即使我现在正在获取我的m/c Locale,它仍然显示为en_US,即使我的m/c Locale设置为fr_BE.
以下是上述代码的输出,它是在Java 1.7.0_09上编译和运行的:
en_US java-version-1.7.0_09 prop:true getLocale-en_US
关于可能导致什么的任何想法?提前谢谢了.
我正在尝试解决使用 Java 17 运行时运行 Nexus IQ 扫描仪的问题。
错误是
java.lang.reflect.InaccessibleObjectException:无法使受保护的最终 java.lang.Class java.lang.ClassLoader.defineClass(java.lang.String,byte[],int,int,java.security.ProtectionDomain) 抛出 java.lang .ClassFormatError 可访问:模块 java.base 不会向未命名模块“打开 java.lang”@7225790e
所以我尝试将--add-opens java.base/java.lang=ALL-UNNAMED修复传递给运行的 JVM nexus-iq-cli.jar。
不幸的是,我无法完全控制java -jar ...在 CI 上执行的命令,否则我只会--add-opens java.base/java.lang=ALL-UNNAMED显式地传递。由于该限制,我尝试使用其他一些方法来设置全局 JVM 参数设置。我想到的一种方法是使用_JAVA_OPTIONS环境变量。
令我惊讶的是 Java 因错误而退出:
无法识别的选项:--add-opens
当我尝试按如下方式传递时:
# with unix shell you can set value to some variable and execute something in one line
_JAVA_OPTIONS='--add-opens java.base/java.lang=ALL-UNNAMED' java
Run Code Online (Sandbox Code Playgroud)
另一方面,当我直接传递此选项时,Java 完全正常并且按预期运行:
java --add-opens java.base/java.lang=ALL-UNNAMED
Run Code Online (Sandbox Code Playgroud)
--add-opens java.base/java.lang=ALL-UNNAMED如果我无法直接控制java -jarCI 执行 Nexus IQ 扫描步骤的命令,我缺少什么以及传递参数的其他可能方法是什么?
运行弹性 beanstalk java 应用程序(不是 tomcat)时,如何启用远程调试?
AWS 文档 展示了如何通过指定启动 java 进程的命令为应用程序实现它。
但是如果我想单独部署相同的应用程序(例如一个开发和一个生产部署),并且只想为开发启用远程调试,这如何实现?