2013-01-16 236 views
7

我想用這裏描述的3個步驟 - http://www.javaworld.com/community/node/3968創建一個定製的maven倉庫。所以,我跟所有的步驟,在這裏我有庫: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文件是這樣的:

<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報告校驗和不好。

我會很感激這裏的任何幫助。

回答

10

我來到這裏尋找相同的答案。花了幾個小時試圖弄清楚後,我終於發現,發生這種情況的原因有兩個方面:

  1. 通過的md5sum和shasum創建的校驗和不正是Maven是尋找
  2. 你需要的所有校驗文件。

所以基本上這篇關於javaworld.com的教程是完全或至少部分錯誤的。

所以什麼答案:

  1. 使用-DcreateChecksum=true PARAM您mvn install:install-file命令。
  2. 重命名生成的maven-metadata-local文件以刪除local部件。

我決定我會經常這樣做,我會創建一個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。罐子爲您定製庫:

./bundle-for-remote.sh -g com.mygroup -a myJar -f myJar.jar 

這將創建在當前目錄的.zip稱爲com.mygroup.myJar.zip與所有組件。

乾杯,

凱西

+0

我超出範圍來測試它,但無論如何都接受它作爲答案。 – mark

3

從上面粘貼的內容中,我看不到存儲庫中的com.shunra:license:jar:0.0.1。嘗試將其安裝到您的存儲庫中。或者Maven可以找到它。

雖然錯誤說「沒有可用的校驗和信息」,我認爲什麼是真正想說的是「我甚至無法找到它」

還..如果你是其中的一個喜歡拍照快捷鍵,您隨時都可以拿走< checksumPolicy跳過校驗和驗證>失敗</checksumPolicy>

+0

+1 - 那麼,他們是在回購,因爲禁用校驗策略下載相應的jar文件到本地存儲庫的.m2。所以,校驗和是真正的問題。順便說一句,爲什麼你不能在回購中看到他們?注意'dir/s/b'輸出中的jar文件。如果您只能提供校驗和問題的解決方案,我想將您的答覆列爲答案,現在它只是一種解決方法。 – mark

+0

順便說一句,如果您認爲存儲庫格式不正確,請告訴我應該如何創建它。 – mark

+0

上面粘貼的存儲庫內容,我只能看到兩件事:com.safenet.hasp:jar和org.jnetcap:jnetcap:jar。我沒有看到com.shunra:license:jar。另外關於校驗和,你有沒有試過去除 fail,如上所述? – gerrytan