为什么 Maven 报告“校验和验证失败,存储库中没有可用的校验和”?

2024-01-01

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

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 文件中使用 hasp 工件,如下所示:

<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 仍报告错误的校验和。


我来这里寻找同样的答案。经过几个小时的尝试后,我终于发现发生这种情况的原因有两个:

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

所以基本上 javaworld.com 上的教程是完全错误的,或者至少是部分错误的。

那么答案是什么呢:

  1. Use the -DcreateChecksum=true你的参数mvn install:install-file命令。
  2. 重命名maven-metadata-local生成的文件用于删除local part.

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

我设计了下面的脚本来在临时目录中运行整个过程,然后压缩结果,然后您可以将其上传到自定义存储库。

#! /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 文件,其中包含所有组件。

Cheers,

Casey

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

为什么 Maven 报告“校验和验证失败,存储库中没有可用的校验和”? 的相关文章

随机推荐

  • 获取从 PubSub 事件触发的 Google Cloud Functions 的执行 ID

    对于从 HTTP 触发的 Google Cloud Functions 可以通过检查 HTTP 请求的标头来检索执行 ID Function Execution Id package p import fmt net http func F
  • Angular 2.0.2 - 静态解析符号值时遇到错误

    在运行 i18n 时 我还遇到了著名的错误 静态解析符号值时遇到错误 不支持函数调用 请考虑将函数或 lambda 替换为对导出函数的引用 解析符号 我已经做了很多研究 而且我没有使用 lambda 函数 当我将以下导入语句添加到我的基本模
  • 这是“十分之一”的重写时间吗?

    如果可以避免的话 我非常反对重写应用程序 我理解这样的规则 十分之九 最好进行重构 但我所处的情况可能是十分之一 我正在寻找这条线 目前的情况是 我接手了一个 VB6 SQL 应用程序的维护 总代码行数为 75 100k 代码隐藏 模块和类
  • Haskell 运算符与函数优先级

    我正在尝试为自己验证一些关于 Haskell 中运算符和函数优先级的内容 例如下面的代码 list map foo xs 可以重写为 list map foo xs 并且最终将是 list map foo xs 我曾经的问题是 为什么第一个
  • C语言中的UDP广播

    当我通过下面的代码广播消息时 主机上的服务器也收到该消息 如何防止主机接收其发送的消息 是否可以更改代码上的某些内容 或者使用类似的内容会更好if strcmp hostIP IP of the package 0
  • 如何使用 Java 和 XmlSchema Core 解析 XSD 并读取所有复杂元素及其子元素

    我正在使用Apache XmlSchema Core库来解析XSD文件并获取所有元素及其子类型 数据类型 maxOccurs 等 我正在关注文档Apache XML 架构核心 http ws apache org xmlschema xml
  • 我想用 Proguard 混淆 AndroidManifest.xml

    我可以使用 Proguard 混淆 AndroidManifest xml 文件吗 我想在我的 proguard config 文件中写入源代码 adaptresourcefilenames AndroidManifest xml 但这没用
  • 进度条会减慢应用程序速度吗?

    当我有进度条时 与没有进度条的启动相比 我的应用程序启动需要更长的时间 有可能吗 或者这只是视觉效果 我想 并且也注意到 进度条的创建和修改需要一些时间 时间开销对于长时间运行的操作不太重要 但对于短时间操作 几秒 来说很明显 然而 我更喜
  • 共享元素活动过渡动画中的 Z 顺序

    我正在使用与此类似的代码制作一些基本的共享元素活动转换动画 Intent i new Intent AnActivity this AnotherActivity class ActivityOptionsCompat options Ac
  • Opentok 屏幕共享音频

    我尝试使用 opentok JS 客户端创建一个屏幕共享应用程序 该应用程序也共享发布者的音频 屏幕共享工作正常 但音频从未被共享 现在 我注意到控制台 Firefox 中有一条警告说Invalid audioSource passed t
  • Jupyter nbconvert LaTex 导出主题

    我正在使用 Jupyter Notebook nbconvert 另存为菜单 通过 Latex 导出为 pdf 然而 pdf 文件的状态并不好 例如 一些宽表显示得很好 我希望有一个用于将表格大小调整为页面宽度的框 是否有任何样式 模板可以
  • 循环遍历 Android 视图的所有子视图?

    我正在开发一款 Android 游戏 为了帮助实现它 我的想法是创建视图的子类 然后 我将插入此类的几个实例作为主视图的子视图 每个实例都会处理按下时的检测 通过 OnTouchListener 我现在遇到的问题是如何循环遍历所有这些子视图
  • 获取 org.elasticsearch.transport.NodeDisconnectedException:[][inet[localhost/127.0.0.1:9300]][cluster/nodes/info] 已断开连接

    我是 Elastic Search Java Api 5 0 的新手 我正在使用elasticsearch 5 0 0 我尝试使用 Spring Boot 创建一个 Java 应用程序 Maven 运行应用程序后 显示 2016 11 04
  • 在heroku上的设计设置中找不到ENV['SECRET_KEY']

    这个要点不对您的密钥进行版本控制 https gist github com cjolly 6265302太棒了 我已经使用它几次了 不再对我的 Rails 密钥库进行版本控制 我尝试将它用于heroku 上的设计secret key 但我
  • 寻找比 GDI 更快的解决方案来渲染动态数据图

    我使用 C CLI 编写了一个简单的基于 GDI 的数据绘图仪 但它不是特别快 一些基本分析表明问题在于屏幕渲染 有没有办法为 UserControl 启用硬件加速 或者是否有用于 direct3D 的 net 接口 或者我可以考虑其他一些
  • Angular - ui-router 获取之前的状态

    有没有办法获取当前状态的先前状态 例如 我想知道当前状态 B 之前的前一个状态是什么 其中前一个状态是状态 A 我无法在 ui router github 文档页面中找到它 在移动到新状态之前 我使用解析来保存当前状态数据 angular
  • 我的 CREATE View 查询中不需要锁定吗

    我正在 MS SQL Server 上创建一个视图 我对 MS SQL 没有太多接触 并且不太熟悉 NO LOCK 提示 我明白它的作用 但我不知道我是否需要在我的情况下使用它 有人问我是否应该包括它 但我不知道 我是否需要在用于创建视图的
  • 将 Spark DataFrame 列转换为 Python 列表

    我处理一个有两列的数据框 mvv 和 count mvv count 1 5 2 9 3 3 4 1 我想获得两个包含 mvv 值和计数值的列表 就像是 mvv 1 2 3 4 count 5 9 3 1 所以 我尝试了以下代码 第一行应该
  • Ironpython调用numpy问题

    铁蟒2 6 蟒蛇2 6 5 麻木 科学Py import sys sys path append r D Python26 dll sys path append r D Python26 Lib sys path append r D P
  • 为什么 Maven 报告“校验和验证失败,存储库中没有可用的校验和”?

    我正在尝试使用此处描述的 3 个步骤创建自定义 Maven 存储库 http www javaworld com community node 3968 http www javaworld com community node 3968