maven - 为什么Maven报告 "Checksum validation failed, no checksums available from the repository"?

标签 maven repository

我正在尝试使用此处描述的3个步骤-http://www.javaworld.com/community/node/3968创建一个自定义Maven存储库。因此,我遵循了所有步骤,并在这里有了存储库:

D:\maven2>dir /s/b
D:\maven2\com
D:\maven2\org
D:\maven2\web.config
D:\maven2\com\safenet
D:\maven2\com\safenet\hasp
D:\maven2\com\safenet\hasp\1
D:\maven2\com\safenet\hasp\maven-metadata.xml
D:\maven2\com\safenet\hasp\maven-metadata.xml.md5
D:\maven2\com\safenet\hasp\maven-metadata.xml.sha1
D:\maven2\com\safenet\hasp\1\hasp-1.jar
D:\maven2\com\safenet\hasp\1\hasp-1.pom
D:\maven2\com\safenet\hasp\1\_maven.repositories
D:\maven2\org\jnetpcap
D:\maven2\org\jnetpcap\jnetcap
D:\maven2\org\jnetpcap\jnetcap\1.3
D:\maven2\org\jnetpcap\jnetcap\maven-metadata.xml
D:\maven2\org\jnetpcap\jnetcap\maven-metadata.xml.md5
D:\maven2\org\jnetpcap\jnetcap\maven-metadata.xml.sha1
D:\maven2\org\jnetpcap\jnetcap\1.3\jnetcap-1.3.jar
D:\maven2\org\jnetpcap\jnetcap\1.3\jnetcap-1.3.pom
D:\maven2\org\jnetpcap\jnetcap\1.3\_maven.repositories

D:\maven2>type com\safenet\hasp\maven-metadata.xml
<?xml version="1.0" encoding="UTF-8"?>
<metadata>
  <groupId>com.safenet</groupId>
  <artifactId>hasp</artifactId>
  <versioning>
    <release>1</release>
    <versions>
      <version>1</version>
    </versions>
    <lastUpdated>20130108125547</lastUpdated>
  </versioning>
</metadata>

D:\maven2>type org\jnetpcap\jnetcap\maven-metadata.xml.md5
297455697088aad6bdbe256d48fb0676 *maven-metadata.xml

D:\maven2>type org\jnetpcap\jnetcap\maven-metadata.xml.sha1
f86d93727a76525f42f1b67997020e1a9a41b948 *maven-metadata.xml

D:\maven2>type org\jnetpcap\jnetcap\1.3\jnetcap-1.3.pom
<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"
    xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance">
  <modelVersion>4.0.0</modelVersion>
  <groupId>org.jnetpcap</groupId>
  <artifactId>jnetcap</artifactId>
  <version>1.3</version>
  <description>POM was created from install:install-file</description>
</project>

D:\maven2>

现在,我试图在pom文件中使用搭扣 Artifact ,如下所示:
<dependency>
  <groupId>com.safenet</groupId>
  <artifactId>hasp</artifactId>
  <version>1</version>
  <scope>provided</scope>
</dependency>

并像这样引用存储库:
<repository>
  <releases>
    <enabled>true</enabled>
    <updatePolicy>always</updatePolicy>
    <checksumPolicy>fail</checksumPolicy>
  </releases>
  <id>dev-builder</id>
  <name>Shunra private repository</name>
  <url>http://dev-builder/maven2</url>
  <layout>default</layout>
</repository>

不幸的是,它不能按预期工作:
[INFO] Building license 0.0.1
[INFO] ------------------------------------------------------------------------
Downloading: http://dev-builder/maven2/com/safenet/hasp/1/hasp-1.pom
[WARNING] The POM for com.safenet:hasp:jar:1 is missing, no dependency information available
Downloading: http://dev-builder/maven2/com/safenet/hasp/1/hasp-1.jar
[INFO] ------------------------------------------------------------------------
[INFO] Reactor Summary:
[INFO]
[INFO] Local Driver Proxy ................................ SUCCESS [2.579s]
[INFO] Emulation API ..................................... SUCCESS [1.637s]
[INFO] util.logging ...................................... SUCCESS [1.023s]
[INFO] Infra ............................................. SUCCESS [0.250s]
[INFO] dtos .............................................. SUCCESS [0.691s]
[INFO] commons ........................................... SUCCESS [0.426s]
[INFO] license ........................................... FAILURE [2.195s]
[INFO] core .............................................. SKIPPED
[INFO] vcat .............................................. SKIPPED
[INFO] VCat-build ........................................ SKIPPED
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 9.044s
[INFO] Finished at: Tue Jan 15 21:27:43 EST 2013
[INFO] Final Memory: 6M/15M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal on project license: Could not resolve dependencies for project com.shunra:license:jar:0.0.1: Could not transfer artifact com.safenet:hasp:jar:1 from/to dev-builder (http
://dev-builder/maven2): Checksum validation failed, no checksums available from the repository -> [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
[ERROR]
[ERROR] After correcting the problems, you can resume the build with the command
[ERROR]   mvn <goals> -rf :license
c:\dev\shunra\Application\Builder\build\vcat>

我不知道这是什么问题。 md5和sha1文件是使用md5sum和sha1sum实用程序的cygwin端口创建的。尽管如此,Maven仍然报告了错误的校验和。

最佳答案

我来这里寻找相同的答案。在花了数小时试图弄清楚之后,我终于发现发生这种情况的原因有两个:

  • 由md5sum和shasum创建的校验和并不完全是Maven在寻找的
  • 您需要所有文件的校验和。

  • 因此,基本上,javaworld.com上的教程完全或至少部分是错误的。

    那么答案是什么:
  • -DcreateChecksum=true命令上使用mvn install:install-file参数。
  • 重命名为删除maven-metadata-local部分而生成的local文件。

  • 我决定我将经常这样做,我将创建一个bash脚本来自动化该过程,也许您会发现它也很有用。

    我设计了以下脚本,以便在temp目录中运行整个过程,然后压缩结果,然后可以将其上传到自定义存储库中。
    #! /bin/bash
    
    USAGE(){
        println "Usage: `basename $0` -g GroupId -a ArtifactId  -f file [-voh] args\n\n";
    
        println "Options:";
        println "   h   Print usage";
        println "   v   Version (Defaults to 1.0)";
        println "   o   Output zip file name (Defaults to GroupId.ArtifactId.zip)";
    
    
    }
    println(){
    
        echo "$1";
    }
    
    
    VERSION="1.0";
    
    # Parse command line options.
    while getopts hv:o:g:a:f: OPT; do
        case "$OPT" in
            h)
                USAGE
                exit 0
                ;;
            v)
              VERSION=$OPTARG;
                ;;
        g)
              GROUP_ID=$OPTARG;
                ;;
        a)
              ARTIFACT_ID=$OPTARG;
                ;;
        f)
                INPUT_FILE=$OPTARG
                ;;
            o)
                OUTPUT_FILE=$OPTARG
                ;;
            \?)
                # getopts issues an error message
            echo "Error: " >&2;
                USAGE
                exit 1
                ;;
        esac
    done
    
    if [ -z "${OUTPUT_FILE}" ]; then
        OUTPUT_FILE="$GROUP_ID.$ARTIFACT_ID.zip";
    fi
    
    
    
    # Remove the switches we parsed above.
    shift `expr $OPTIND - 1`
    
    if [ -z "${ARTIFACT_ID}" ]; then
        echo "Error: You must specify an artifact id."
    fi
    
    if [ -z "${GROUP_ID}" ]; then
        echo "Error: You must specify an group id."
    fi
    
    if [ -z "${INPUT_FILE}" ]; then
        echo "Error: You must specify an group id."
    fi
    
    if [ ! -f "${INPUT_FILE}" ];
    then
         echo "Error: Input file '$INPUT_FILE' does not exist."
    fi
    
    # Create a temp directory which we will use as our 'local repository'
    TEMPDIR=$(mktemp -dt "build-maven-dep.XXXXXXX")
    
    TEMPDIR_SUB="$GROUP_ID.$ARTIFACT_ID";
    TEMP_REPO_LOC="$TEMPDIR/$TEMPDIR_SUB";
    mkdir -p $TEMP_REPO_LOC;
    
    mvn install:install-file -DlocalRepositoryPath=$TEMP_REPO_LOC -DgroupId=$GROUP_ID -DartifactId=$ARTIFACT_ID -Dversion=$VERSION -Dfile=$INPUT_FILE -Dpackaging=jar -DgeneratePom=true -DcreateChecksum=true
    
    CUR_DIR=$(pwd);
    
    # Enter the temp repository we created which is now populated.
    cd $TEMP_REPO_LOC;
    
    PACKAGE_STRUC="$GROUP_ID.$ARTIFACT_ID";
    
    # Dive down into directory structure until we get to the *.xml files.
    IFS='. ' read -ra ADDR <<< $PACKAGE_STRUC
    for i in "${ADDR[@]}"; do
       println "Moving into: $i";
       cd $i;
       println "Now  in $(pwd)";
    done
    
    # Rename the files to what maven expects.
    mv maven-metadata-local.xml maven-metadata.xml
    mv maven-metadata-local.xml.md5 maven-metadata.xml.md5 
    mv maven-metadata-local.xml.sha1 maven-metadata.xml.sha1
    
    # Zip up our results.
    cd $TEMP_REPO_LOC;
    cd ..;
    zip -r $OUTPUT_FILE $TEMPDIR_SUB
    mv $OUTPUT_FILE $CUR_DIR
    
    # Return back to our original directory and remove the temp directory
    cd $CUR_DIR;
    rm -Rf $TEMPDIR;
    
    # EOF
    

    假设您要将myjar.jar打包为您的自定义存储库:
    ./bundle-for-remote.sh -g com.mygroup -a myJar -f myJar.jar
    

    这将在您的当前目录com.mygroup.myJar.zip中创建一个.zip及其所有组件。

    干杯,

    凯西

    关于maven - 为什么Maven报告 "Checksum validation failed, no checksums available from the repository"?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14350729/

    相关文章:

    git - Maven 版本 :prepare-with-pom removes release-pom then tries to add it?

    java - 部署 Web 应用程序时出现异常 NoClassDefFoundError :LocalizableImpl

    java - 为什么Maven javafx插件运行测试项目失败

    git - 如何为 Xcode 项目设置 Git 存储库?

    java - 使用 GAE Maven 插件时如何在 IDEA 中调试 Java Google App Engine 应用程序?

    c# - 我应该如何从我的服务层方法中公开总记录数和分页记录的 IEnumerable 集合?

    c# - 如何安全地处理对存储库数据的无效请求?

    git - 如何清理远程 GIT 存储库?

    android-studio - 构建 :gradle:2. 1.0-alpha3 在哪里?

    java - 如何修复Java异常 "SQLSyntaxErrorException: Table ' x.y'不存在”