Java Maven:自动安装外部JAR
我的项目依赖于Java Maven:自动安装外部JAR,java,docker,maven,jar,Java,Docker,Maven,Jar,我的项目依赖于oraclejar来连接到它的数据库。因为它是一个外部jar,所以我从oracle网站下载并使用 mvn install:install-file -Dfile=ojdbc8.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar 在本地运行maven clean package运行良好,因为已经安装了ojdbc.jar 但是,现在我将build步骤移动到Docker图像 fr
oracle
jar来连接到它的数据库。因为它是一个外部jar,所以我从oracle网站下载并使用
mvn install:install-file -Dfile=ojdbc8.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar
在本地运行maven clean package
运行良好,因为已经安装了ojdbc.jar
但是,现在我将build
步骤移动到Docker
图像
from alpine/git as clone
workdir /app
run git clone --single-branch -b master https://github.com/xxxxxxxx
from maven:3.5-jdk-8-alpine
workdir /app
copy --from=0 /app/idot/idot-backend /app
run mvn clean install -T 1C -DskipTests
from openjdk:8-jre-alpine
workdir /app
copy --from=build /app/target/idot-0.0.1-SNAPSHOT.jar /app
cmd ["java -jar idot-0.0.1-SNAPSHOT.jar"]
由于外部jar不存在,因此在构建期间,此步骤显然失败。因此,为了删除依赖关系,我编辑了pom.xml
以包括
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file://${project.basedir}/libs</url>
</repository>
</repositories>
这将创建一个包含ojdbc8-12.2.0.1.jar
和其他元信息的libs
文件夹。我在github
现在,当尝试构建docker
映像时,它失败了,并显示以下错误消息
。。。
...
.
.
。
.
。
.
我在docker
文件中添加了相同的安装命令,而不是所有的麻烦。它现在运行良好
from alpine/git as clone
workdir /app
run git clone --single-branch -b master https://@github.com/xxxx
from maven:3.5-jdk-8-alpine
workdir /app
copy --from=0 /app/idot/idot-backend /app
run mvn install:install-file -Dfile=/app/ojdbc8.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar
run mvn clean install -T 1C -DskipTests
from openjdk:8-jre-alpine
workdir /app
copy --from=build /app/target/idot-0.0.1-SNAPSHOT.jar /app
cmd ["java -jar idot-0.0.1-SNAPSHOT.jar"]
我在docker
文件中添加了相同的安装命令,而不是所有的麻烦。它现在运行良好
from alpine/git as clone
workdir /app
run git clone --single-branch -b master https://@github.com/xxxx
from maven:3.5-jdk-8-alpine
workdir /app
copy --from=0 /app/idot/idot-backend /app
run mvn install:install-file -Dfile=/app/ojdbc8.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar
run mvn clean install -T 1C -DskipTests
from openjdk:8-jre-alpine
workdir /app
copy --from=build /app/target/idot-0.0.1-SNAPSHOT.jar /app
cmd ["java -jar idot-0.0.1-SNAPSHOT.jar"]
我用了同样的方法,它对我很有效。你可以在这里看到
<dependencies>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.4.2-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven-repository</id>
<url>file:///${project.basedir}/repo</url>
</repository>
</repositories>
mvn deploy:deploy-file -Durl="file:\\\<project-path>\repo" -Dfile=Java-WebSocket-1.4.2-SNAPSHOT.jar -DgroupId=org.java-websocket -DartifactId=Java-WebSocket -Dpackaging=jar -Dversion=1.4.2-SNAPSHOT
org.java-websocket
Java WebSocket
1.4.2-快照
maven存储库
文件://${project.basedir}/repo
mvn部署:部署文件-Durl=“file:\\\\repo”-Dfile=Java-WebSocket-1.4.2-SNAPSHOT.jar-DgroupId=org.Java-WebSocket-DartifactId=Java-WebSocket-dpackage=jar-Dversion=1.4.2-SNAPSHOT
我使用了同样的方法,它对我很有效。你可以在这里看到
<dependencies>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.4.2-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven-repository</id>
<url>file:///${project.basedir}/repo</url>
</repository>
</repositories>
mvn deploy:deploy-file -Durl="file:\\\<project-path>\repo" -Dfile=Java-WebSocket-1.4.2-SNAPSHOT.jar -DgroupId=org.java-websocket -DartifactId=Java-WebSocket -Dpackaging=jar -Dversion=1.4.2-SNAPSHOT
org.java-websocket
Java WebSocket
1.4.2-快照
maven存储库
文件://${project.basedir}/repo
mvn部署:部署文件-Durl=“file:\\\\repo”-Dfile=Java-WebSocket-1.4.2-SNAPSHOT.jar-DgroupId=org.Java-WebSocket-DartifactId=Java-WebSocket-dpackage=jar-Dversion=1.4.2-SNAPSHOT
您需要使用Dockerfile中的copy语句在mvn构建路径中复制ojdbc jar。为什么上述操作失败,它在local上有效,而在local上有效,因为您手动下载了文件(这基本上是Docker中的复制步骤)。然后通过maven install:installfile将ojdbc jar提供给project。另外,由于您有本地mvn存储库设置,jar将在以下位置可用:${project.basedir}/libs
。但是这是您的本地版本,如果您也提交了${project.basedir}/libs
,那么这会起作用,我认为情况并非如此。您需要理解存储库的概念,而且Docker构建没有对您放入jar的构建的访问权限,除非您明确告诉它如何操作。@Saurabh如前所述,我也提交了${project.basedir}/libs
文件夹。它显示了提交文件夹的错误消息。您需要使用Dockerfile中的copy语句在mvn构建路径中复制ojdbc jar。为什么上述操作失败,它在localIt上工作,在local上工作,因为您手动下载了文件(这基本上是Docker中的复制步骤)。然后通过maven install:installfile将ojdbc jar提供给project。另外,由于您有本地mvn存储库设置,jar将在以下位置可用:${project.basedir}/libs
。但是这是您的本地版本,如果您也提交了${project.basedir}/libs
,那么这会起作用,我认为情况并非如此。您需要理解存储库的概念,而且Docker构建没有对您放入jar的构建的访问权限,除非您明确告诉它如何操作。@Saurabh如前所述,我也提交了${project.basedir}/libs
文件夹。它将显示带有已提交文件夹的错误消息。
Downloaded from central: https://repo.maven.apache.org/maven2/com/google/guava/guava/20.0/guava-20.0.jar (2.4 MB at 12 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/io/springfox/springfox-swagger-ui/2.9.2/springfox-swagger-ui-2.9.2.jar (2.9 MB at 14 kB/s)
Downloaded from central: https://repo.maven.apache.org/maven2/net/bytebuddy/byte-buddy/1.9.12/byte-buddy-1.9.12.jar (3.3 MB at 14 kB/s)
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 07:13 min (Wall Clock)
[INFO] Finished at: 2020-06-17T11:19:56Z
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project idot: Could not resolve dependencies for project com.novartis:idot:jar:0.0.1-SNAPSHOT: Could not find artifact com.oracle:ojdbc8:jar:12.2.0.1 in local-maven-repo (file:///app/libs) -> [Help 1]
[ERROR]
[ERROR] To see the full stack trace of the errors, re-run Maven with the -e switch.
[ERROR] Re-run Maven using the -X switch to enable full debug logging.
[ERROR]
[ERROR] For more information about the errors and possible solutions, please read the following articles:
[ERROR] [Help 1] http://cwiki.apache.org/confluence/display/MAVEN/DependencyResolutionException
The command '/bin/sh -c mvn clean install -T 1C -DskipTests' returned a non-zero code: 1
from alpine/git as clone
workdir /app
run git clone --single-branch -b master https://@github.com/xxxx
from maven:3.5-jdk-8-alpine
workdir /app
copy --from=0 /app/idot/idot-backend /app
run mvn install:install-file -Dfile=/app/ojdbc8.jar -DgroupId=com.oracle -DartifactId=ojdbc8 -Dversion=12.2.0.1 -Dpackaging=jar
run mvn clean install -T 1C -DskipTests
from openjdk:8-jre-alpine
workdir /app
copy --from=build /app/target/idot-0.0.1-SNAPSHOT.jar /app
cmd ["java -jar idot-0.0.1-SNAPSHOT.jar"]
<dependencies>
<dependency>
<groupId>org.java-websocket</groupId>
<artifactId>Java-WebSocket</artifactId>
<version>1.4.2-SNAPSHOT</version>
</dependency>
</dependencies>
<repositories>
<repository>
<id>maven-repository</id>
<url>file:///${project.basedir}/repo</url>
</repository>
</repositories>
mvn deploy:deploy-file -Durl="file:\\\<project-path>\repo" -Dfile=Java-WebSocket-1.4.2-SNAPSHOT.jar -DgroupId=org.java-websocket -DartifactId=Java-WebSocket -Dpackaging=jar -Dversion=1.4.2-SNAPSHOT