在使用kie-server docker镜像时,通过发送curl命令来执行指令。

setting.xml配置内容如下:

<profiles>
    <profile>
      <id>kie</id>
      <properties>
      </properties>
      <repositories>
        <repository>
          <id>jboss-public-repository-group</id>
          <name>JBoss Public Maven Repository Group</name>
          <url>http://mynexus:8081/nexus/content/repositories/releases</url>
          <layout>default</layout>
          <releases>
            <enabled>true</enabled>
            <updatePolicy>never</updatePolicy>
          </releases>
          <snapshots>
            <enabled>true</enabled>
            <updatePolicy>always</updatePolicy>
          </snapshots>
        </repository>
      </repositories>
      ... plugin repo also set ...
</profiles>
<activeProfiles>
  <activeProfile>kie</activeProfile>
</activeProfiles>

当创建一个container并加载一个nexus仓库中的依赖时,输出如下信息:

09:29:35,236 WARN [org.appformer.maven.integration.embedder.MavenSettings] (default task-1) Environment variable M2_HOME is not set

09:29:36,033 INFO [org.appformer.maven.integration.Aether] (default task-1) The local repository directory /opt/jboss/.m2/repository doesn't exist. Creating it.

09:30:06,421 WARN [org.appformer.maven.integration.MavenRepository] (default task-1) Unable to resolve artifact: myGroup:myArtifact:0.0.1

09:30:36,542 ERROR [org.kie.server.services.impl.KieServerImpl] (default task-1) Error creating container 'myContainer' for module 'myGroup:myArtifact:0.0.1': java.lang.RuntimeException: Cannot find KieModule: myGroup:myArtifact:0.0.1

看起来是忽略了本地的maven仓库,而视图使用远程的maven仓库。如果采用本地仓库则可正常运行。在kie-server docker运行时,settings.xml中确认配置的是/opt/jboss/.m2文件夹。

那么,为什么会出现上面的问题呢?

解决问题可思考两个方面,如果直接使用镜像来部署kie-server,则需要在本地配置MAVEN_REPO_URL, MAVEN_REPO_USERNAME和MAVEN_REPO_PASSWORD等。关键本机的Maven也要安装,配置好MAVEN_HOME和对应的settings.xml。

如果需要在docker文件中配置Maven,则可参考如下配置:

FROM openjdk:8-jdk-alpine

# Install Maven
RUN apk add --no-cache curl tar bash
ARG MAVEN_VERSION=3.6.3

RUN mkdir -p /usr/share/maven && \
  curl -fsSL http://apache.osuosl.org/maven/maven-3/$MAVEN_VERSION/binaries/apache-maven-$MAVEN_VERSION-bin.tar.gz | tar -xzC /usr/share/maven --strip-components=1 && \
  ln -s /usr/share/maven/bin/mvn /usr/bin/mvn
ENV M2_HOME /usr/share/maven

# copy maven settings and repository
COPY my-maven-settings.xml /root/.m2/settings.xml

# copy application
COPY my-kieserver.jar /app.jar
# specify default command
CMD ["/usr/bin/java", "-Dkie.maven.settings.custom=/root/.m2/settings.xml", "-jar", "/app.jar"]

KIE Server使用Maven通常有三种路径:第一,本机安装的Maven,也就是配置好MAVEN_HOME的Maven;第二,默认的.m2文件下的settings.xml文件;第三,通过kie-server的系统参数(“kie.maven.settings.custom”)指定的settings.xml文件。

而这三者会组合使用。所以在使用的时候,一定要检查好环境中Maven的配置,而基于docker的容器化处理,更要核查一下docker内外的Maven环境配置。



KIE Server无法从远程Maven仓库获得Artifact(jar包)解决方案插图

关注公众号:程序新视界,一个让你软实力、硬技术同步提升的平台

除非注明,否则均为程序新视界原创文章,转载必须以链接形式标明本文链接

本文链接:https://choupangxia.com/2022/06/10/kie-server-remote-maven/