5

上周我们的项目停止工作,因为 maven-ant-task 似乎正在调用 maven central withhttp而不是https现在它被强制执行,所以它返回一个501.

我们看到 Apache 发布了一个新的库Maven Artifact Resolver Ant Tasks,所以我们正在尝试迁移。

这是我们的旧文件,用于调用我们内部的 jaxb 库来生成 java 类。依赖是dome-jaxb,我们正在用maven-ant-tasks.

<project name="Main" basedir="../../" xmlns:artifact="antlib:org.apache.maven.artifact.ant">

   <!-- ==================== Execution Classpath =========================== -->
   <artifact:dependencies filesetId="dependency.fileset" useScope="runtime">
      <dependency groupId="com.dome" artifactId="dome-jaxb" version="LATEST"/>
   </artifact:dependencies>

   <path id="Execute.classpath">
      <fileset refid="dependency.fileset"/>
      <pathelement path="target/classes"/>
   </path>

   <!-- ==================== Type Target ===================================== -->
   <target name="Types" description="Generate type">
      <java classname="dome.util.xml.converter.GenerateClassFromXMLConfig" fork="yes">
         <sysproperty key="file.encoding" value="UTF-8"/>
         <arg value="${basedir}"/>
         <arg value="${xmlConfig}"/>
         <arg value="${moduleId}"/>
         <classpath refid="Execute.classpath"/>
      </java>
   </target>
</project>

我下载了项目,生成了 uber jar(后来我发现你也可以在这里下载它),并将它添加到我的 ant/lib (所在maven-ant-task.jar位置)。

我设法放在一起的新配置文件是这个:

<project name="Main" basedir="../../" xmlns:resolver="antlib:org.apache.maven.resolver.ant">

   <!-- ==================== Execution Classpath =========================== -->
   <taskdef uri="antlib:org.apache.maven.resolver.ant" resource="org/apache/maven/resolver/ant/antlib.xml">
      <classpath>
         <fileset dir="target" includes="maven-resolver-ant-tasks-*uber.jar"/>
      </classpath>
   </taskdef>

   <path id="Execute.classpath">
      <pathelement path="target/classes"/>
   </path>

   <resolver:resolve>
      <dependencies>
         <dependency
            groupId="com.dome"
            artifactId="dome-jaxb"
            version="LATEST"
            scope="runtime"
         />
      </dependencies>      
      <path refid="Execute.classpath" classpath="runtime"/>
   </resolver:resolve>

   <!-- ==================== Type Target ===================================== -->
   <target name="Types" description="Generate type">
      <java classname="dome.util.xml.converter.GenerateClassFromXMLConfig" fork="yes">
         <sysproperty key="file.encoding" value="UTF-8"/>
         <arg value="${basedir}"/>
         <arg value="${xmlConfig}"/>
         <arg value="${moduleId}"/>
         <classpath refid="Execute.classpath"/>
      </java>
   </target>

</project>

这似乎可行,但看起来它没有使用 mysettings.xml位于~/.m2/(默认位置,应使用读取文档的位置),因为我们有一个带有本地库的 nexus 存储库,但似乎它只是检查maven 中央存储库,因为错误是:

Could not find artifact com.dome:dome:jar:4.23.0 in central (https://repo1.maven.org/maven2/)

我在文档中看到您可以手动设置您的settings.xml位置,但是没有示例或指示将该配置放在哪里,所以我无法让它工作。

如果有人有任何想法/建议,将不胜感激。

4

2 回答 2

1

您可能会受到https://issues.apache.org/jira/browse/MRESOLVER-66的影响。我没有看过它,但会很乐意接受补丁。

于 2020-06-22T20:26:33.787 回答
1

我观察到了同样的情况,我认为这是maven-resolver org.eclipse.aether.internal.impl.DefaultArtifactResolver.resolveArtifacts(). 只要我需要解决的每个工件都有一个 maven-metadata.xml,我就可以避免这个问题。所以,我的解决方法是:

  1. 复制我们的部署存储库~/.m2/repository以设置基线

  2. 用于mvn -DupdateReleaseInfo=true任何本地安装

  3. 在运行 Ant 之前使用mvn dependency:go-offlineandmvn dependency:get -Dartifact=...解决任何其他依赖项

于 2020-06-22T17:13:48.573 回答