名前でジャーパッケージ、あなたは情報GAV Mavenを獲得することができます

うるさ:我々は三者の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の")、引数)を返します。
   }

おすすめ

転載: www.cnblogs.com/zhangzongjian/p/11784930.html