首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >从Maven Ant任务迁移到Maven伪影解析器Ant任务

从Maven Ant任务迁移到Maven伪影解析器Ant任务
EN

Stack Overflow用户
提问于 2020-06-15 08:14:46
回答 2查看 1.5K关注 0票数 5

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

我们看到Apache发布了一个新的库Maven伪影解析器Ant任务,所以我们尝试迁移。

这是我们的旧文件,用于调用内部jaxb库来生成java类。依赖项是dome-jaxb,我们用maven-ant-tasks解决了它。

代码语言:javascript
复制
<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 (之后我发现您也可以下载它这里),并将它添加到我的ant/lib ( maven-ant-task.jar所在的位置)中。

我所创建的新配置文件是这样一个:

代码语言:javascript
复制
<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>

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

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

我在文档中看到,您可以手动设置settings.xml位置,但没有任何示例或指示说明将配置放在何处,因此无法使其正常工作。

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

EN

回答 2

Stack Overflow用户

发布于 2020-06-22 17:13:48

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

  1. 将部署存储库复制到~/.m2/repository以设置基线
  2. 使用mvn -DupdateReleaseInfo=true进行任何本地安装
  3. 在运行Ant之前使用mvn dependency:go-offlinemvn dependency:get -Dartifact=...解决任何其他依赖关系
票数 1
EN

Stack Overflow用户

发布于 2020-06-22 20:26:33

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

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/62384077

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档