Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/java/352.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Java 为什么在maven构建中两种类型的bash变量用法不同_Java_Maven - Fatal编程技术网

Java 为什么在maven构建中两种类型的bash变量用法不同

Java 为什么在maven构建中两种类型的bash变量用法不同,java,maven,Java,Maven,我在maven项目中有一个bash脚本来运行我的应用程序。我在bash脚本中使用了两种不同类型的变量用法来编译我的项目: 一, 二, 过滤器如下所示: filter.component.java.opts=-mx4096M $JAVA_OPTS $JACOCO_OPTS filter.component.gc.opts=-XX:+UseG1GC jacoco.version和component.mainclass在pom.xml中定义: <jacoco.version>0.7.6.

我在maven项目中有一个bash脚本来运行我的应用程序。我在bash脚本中使用了两种不同类型的变量用法来编译我的项目:

一,

二,

过滤器如下所示:

filter.component.java.opts=-mx4096M $JAVA_OPTS $JACOCO_OPTS
filter.component.gc.opts=-XX:+UseG1GC
jacoco.version
component.mainclass
pom.xml
中定义:

<jacoco.version>0.7.6.201602180812</jacoco.version>
<component.mainclass>MyAppStarter</component.mainclass>
如果我使用前面提到的变量定义方式,则在构建后传递到
JAVA
${JAVA_OPTS}
将被
-mx4096M
替换,但另一种方式是
$JAVA_OPTS
将更改为
-Xmx3072m-XX:MaxPermSize=1024m-Djava.net.preferIPv4Stack=true

在LinuxBash脚本中,
$JAVA\u OPTS
${JAVA\u OPTS}
之间没有区别;对于
java
maven
,这两者之间有什么区别

编辑1:

对于我提到的最后一个变量用法,
JAVA_OPTS
的变量替换发生在构建过程中。我的意思是,对于第二种方法,当maven构建完成时,最后一行不再包含
JAVA_OPTS
,但是对于第一种方法,不会发生任何更改

对于第一种方式,构建后的最后一行是:

java $GC_OPTS $JAVA_OPTS -classpath $CLASSPATH $MAINCLASS $*
在第一秒钟,我收到了最后一行:

java ${GC_OPTS}  -Xmx3072m -XX:MaxPermSize=1024m  -Djava.net.preferIPv4Stack=true -classpath  ${MAINCLASS} $*
编辑2:

我已将这两个echo命令放在最后两个脚本的
JAVA_OPTS=“${filter.component.JAVA.OPTS}”行之后的

两者的结果是相同的:

test 1 >> -mx4096M -javaagent:../lib/jacoco-javaagent-0.7.6.201602180812.jar=jmx=true,output=tcpserver,address=*,port=6302,includes=*
test 2 >> -mx4096M -javaagent:../lib/jacoco-javaagent-0.7.6.201602180812.jar=jmx=true,output=tcpserver,address=*,port=6302,includes=*
编辑3:

在构建之前,我使用
echo
命令检查了环境变量:

echo 'JAVA_OPTS: '${JAVA_OPTS}
事实证明,
JAVA\u OPTS
是在我的环境中设置的:

JAVA_OPTS:  -Xmx3072m -XX:MaxPermSize=1024m -Djava.net.preferIPv4Stack=true

${…}
使用的语法:

这些由${…}分隔符表示的变量可以来自系统属性、项目属性、过滤器资源和命令行


所以在第二个脚本的最后一行,当maven resource plugin看到
${JAVA_OPTS}
时,它会在环境中搜索
JAVA_OPTS
,然后用它替换它。

plz在
JAVA_OPTS=“${filter.component.JAVA.OPTS}”行之后添加
echo$JAVA_OPTS
,并在两个脚本中共享结果。@TaherKhorshidi,请查看我的编辑。我的项目的
pom.xml
和maven的
settings.xml
都不包含
JAVA\u OPTS
。这个财产的价值来自哪里?来自环境
echo "test 1 >> "$JAVA_OPTS
echo "test 2 >> "${JAVA_OPTS}
test 1 >> -mx4096M -javaagent:../lib/jacoco-javaagent-0.7.6.201602180812.jar=jmx=true,output=tcpserver,address=*,port=6302,includes=*
test 2 >> -mx4096M -javaagent:../lib/jacoco-javaagent-0.7.6.201602180812.jar=jmx=true,output=tcpserver,address=*,port=6302,includes=*
echo 'JAVA_OPTS: '${JAVA_OPTS}
JAVA_OPTS:  -Xmx3072m -XX:MaxPermSize=1024m -Djava.net.preferIPv4Stack=true