うるさ:我々は三者のjarパッケージの部分の束を持っているとき、あなたはMavenの管理に有効にするには、コンフィギュレーションファイルにポンポンを必要とし、GAVは、情報を収集する必要があります。
すぐに次の情報を生成するために、私たちすることができます....
GAV:groupIdを+たartifactId +バージョン
<依存>
<groupIdを> </グループ>
<たartifactId> </たartifactId>
<バージョン> </バージョン>
</依存関係>
1.解凍のjarパッケージファイルは、情報GAVを抽出します
原則:pom.propertiesは、JARパッケージGAVは、情報を記録したファイル。(必ずしもすべてのjarパッケージには、この時点では、方法2を使用することができます。ファイルは、クエリ以上である、pom.propertiesファイルを持っている、または手動でインターネットを検索しているため)
1.1 shスクリプトモード(またはスクリプトが使いやすいと感じ)
getGAV.sh /tmp/lib/javax.servlet-3.0.1.jarテスト/ libに/のjavax.servlet-3.0.1.jar
パラメータは、マルチパラメータのサポートにライン上のファイルパスを転送します
#!/ binに/ bashの ##获取のjar包的にMaven依赖GAV信息 関数main()の { ローカルnotFoundList ための VAR で$ @を 行う 場合は、[!-z " $のVAR " ]; その後、 地元のjarName = ` エコーの$ VAR | SED ' の#* / ##。' | sedの ' sの#の.jar ##グラム' ` ローカルdirNameに =` dirnameに$ var` [!-d " $ dirNameに/ $ jarName " ] && 解凍$ VAR -d $ dirNameに/ $ jarName&>は/ dev / nullの 場合は [-d " $ dirNameに/ $ jarName " ]; その後、 地元のpomProperties = ` 見つける $ dirNameに/ $ jarName - 名前pom.properties` であれば [ " $ pomProperties " =!"" ]; その後、 DOS2UNIX $ pomProperties&>は/ dev / nullに エコー " <依存> " エコー " <groupIdを> " ` はgrep " のgroupId "カット -d ' = ' -f2` " </ groupIdを> " エコー " <たartifactId> " ` grepの " たartifactIdを" $ pomProperties | カット -d ' = ' -f2` " </たartifactId> " エコー " <バージョン> " ` grepの " バージョン" $ pomPropertiesを| カット -d ' = ' -f2` " </バージョン> " " 他 notFoundList = " $ VAR $ notFoundList " Fiの [ -d " $ dirNameに/ $ jarName " ] && RM -rf " $ dirNameに/ $ jarName " 他 notFoundList = " $ VAR $ notFoundList " Fi回線 fiが 行わ あれば [ " $ notFoundList "!= "" ]; その後、 エコー " ============= " エコー "notFoundList:$ notFoundList" エコー " ============= " Fiの } メインの$ @
2. jarファイルのパッケージ名、取得依存情報GAV達人
原則:情報のアクセスhttps://mvnrepository.com/search問い合わせ。(たartifactIdちょうどバージョンと百パーセント正確ではないので、精度率は百パーセントではないですので)
/ ** *のjarパッケージ名で、取得依存情報達人(GAV:グループID成果物IDバージョン) * @param jarFilePathsのjarパッケージの完全なパス名やファイル * / パブリック 静的な 無効getGavFromWeb(文字列... jarFilePaths){ リスト <文字列> = notFoundList 新しい新しいのArrayList <文字列> (); int型 successCount = 0 ; 用(文字列jarFilePath:jarFilePaths){ IF(!StringUtils.isEmpty(jarFilePath)&& jarFilePath.endsWith( "JAR" )){ 文字列searchUrl =「HTTPS: //mvnrepository.com/search " ; JARファイル = 新しい新しいファイル(jarFilePath); // の.jarサフィックスの削除 文字列JARname = jar.getName()ストリング(0を、jar.getName()のlastIndexOf(.. "" )); // バージョン番号を削除し、得ることはありませんいくつかの正確なたartifactId、のキーワード検索 文字列artifactIdSimple = jarName.replaceAll( - | "" "[_] \\ * D。" ); // フィルタリング検索結果のために得るが、必ずしも正確なバージョンではない 文字列versionSimpleをjarName.substring =(artifactIdSimple.length())replaceFirstという( "[ - | _]"、 "" ); 試み{ 文書DOC = Jsoup.connect(searchUrl)。データ( "Q"、ArtifactIdSimple)に.get(); 要素PS = doc.getElementsByClass( "IM-SUBTITLE" ); IF!(CollectionUtils.isEmpty(PS)){ // たartifactId検索結果が最初に取る (0要素p = ps.getを); IF(p.childNodeSize()> 1 ){ 文字列artifactUrl = p.child(1).absUrl( "HREF"。); // 内のハイパーリンクからグループID成果物IDと検索結果を撮影した 文字列[] IDS = artifactUrl。スプリット( "/" ); groupIdを文字列 = IDS [ids.length - 2 ]; 文字列たartifactId = IDS [ids.length - 1 ]; 文字列バージョン = "" ; DOC = Jsoup.connect(artifactUrl)に.get(); 要素として = doc.getElementsByClass( "リリースvbtn" ); // バージョンを取るために、検索結果に対応し、場合、最初の服用しない IF(!){CollectionUtils.isEmpty(AS) IF(!StringUtils.isEmpty(versionSimple)){ ための(エレメント:など){ 場合(versionSimple.equals(a.text())){ バージョン = versionSimple。 破ります; } } } もし(StringUtils.isEmpty(バージョン)){ バージョン = as.get(0 )の.text(); } } System.out.println(StringUtils.format(「<依存性> \ n <groupIdを> {} </のgroupId> \ n <たartifactId> {} </たartifactId> \ n <バージョン> {} </バージョン> \ n < /依存関係>」、のgroupId、たartifactId、バージョン)); successCount ++ ; } 他{ notFoundList.add(jarFilePath)。 } } 他{ notFoundList.add(jarFilePath)。 } } キャッチ )(e.printStackTraceします。 notFoundList.add(jarFilePath)。 } } 他{ notFoundList.add(jarFilePath)。 } } のSystem.out.println(); System.out.println(StringUtils.formatは( "成功:{}、失敗しました:{}、和:{}" 、successCount、notFoundList.size()、jarFilePaths.lengthを)); System.out.println(StringUtils.format( "notFoundList:{}" 、notFoundList))。 }
PS:コードStringUtils.format()は、コンパイルエラーの可能性があり、主に文字列がライン上で通常の文字列の中にスプライシングされ、見栄えの連結する、文字列連結の私自身のパッケージです。
パブリック静的文字列の形式(文字列str、オブジェクト...引数){
String.Formatの(str.replaceAll( "\\ {\\}"、 "%sの")、引数)を返します。
}