我正在尝试执行“mvn install”以从 Dockerfile 创建 war 文件。波纹管是 Dockerfile
FROM scratch
FROM ubuntu:16.04
RUN mkdir /opt/java8
RUN mkdir /opt/tomcat8
RUN mkdir /opt/maven3
ENV JAVA_HOME /opt/java8
ENV CATALINA_HOME /opt/tomcat8
ENV PATH $PATH:$JAVA_HOME/bin:$CATALINA_HOME/bin:$M2_HOME/bin
ADD jdk1.8.0_112 /opt/java8
ADD apache-tomcat-8.0.38 /opt/tomcat8
WORKDIR /home/veni/git/M_UserTP
RUN mvn install
WORKDIR /home/veni/git/M_UserTP/target
RUN mv M_UserTP.war
/home/veni/Documents/dhaval_bhoot/docker_images/tomcat1
ADD M_UserTP.war /opt/tomcat8/webapps
EXPOSE 8080
CMD ["catalina.sh", "run"]
Run Code Online (Sandbox Code Playgroud)
我还在PATH环境变量中添加了maven的bin目录路径。
PATH=/usr/local/sbin:/usr/local/bin:/usr/sbin:/usr/bin:/sbin:/bin:/usr/games:/usr/local/games:/home/veni/Documents /apache-maven-3.3.9/bin/
这个路径是我从机器中的 root 用户设置的,我还在 PATH 变量中添加了与普通用户相同的路径。
所以现在我退出 root 用户并通过 sudo su 返回 root 用户并检查 PATH 变量,它没有 maven 的路径
/bin/sh: 1: mvn: …
在java中,我有2个重载方法,一个是main方法,所以从main方法调用重载方法。
public class Test {
public static void main(String[] args) throws IOException {
doSomething(null);
}
private static void doSomething(Object o) {
System.out.println("method with Object in signature is called.");
}
private static void doSomething(String s) {
System.out.println("method with String in the signature is called.");
}
}
Run Code Online (Sandbox Code Playgroud)
在这里,当我运行此 java 代码时,它将调用 doSomething(String s) 方法并打印
调用签名中带有 String 的方法。
我认为它会调用 doSomething(Object o) 方法,但它不会发生。
那么任何人都可以更详细地向我解释这一点,为什么会发生这种情况以及如何发生?
谢谢你。