簡體   English   中英

Maven發布aar嵌入jar庫

[英]Maven publish an aar embedding jar libs

我正在嘗試將aar發布到我的全新私有Maven服務器上。 我的aar依賴於另一個aar,即嵌入jar文件。

在這里與Artifactory搭配使用的“好”方法是什么?

Main aar
  |
  |__ Shared aar
        |
        |__ Toy jar
        |
        |__ Totoy jar

當我嘗試在Android應用中使用Main時,當它進入Shared中使用的類時,我得到了一個很好的-殘酷的-錯誤:

java.lang.NoClassDefFoundError: Failed resolution of: [.. class embedded in Totoy jar]

我嘗試了多種組合,例如在maven上發布Shared,在Main compile "com.myapp.Shared:1.0.0"其引用為compile "com.myapp.Shared:1.0.0" ,對Main進行相同的操作,或僅將其引用為compile (project_module)

我的.jar文件是否也應該發布到私有Maven並在Daugther中引用(這樣我的Maven中將擁有所有依賴項)?

罐子是Cling和關聯的依賴項(無縫),用於Shared中的某些類,從Main aar調用。

當我發布共享庫並直接在示例中使用它時,我沒有相同的錯誤(這意味着不會發生崩潰,僅當我使用本身嵌入了共享庫的Main庫時才會發生崩潰)。

當所有這些都在一個項目中定義為全部統治並且所有編譯順序都定義為“內部模塊”依賴項時,它可以正常工作,因為我想問題出在共享庫的jar上,但是找不到如何解決這個問題

謝謝您的幫助!

編輯

我設法使其正常工作,請參閱我的答案。

因此,我設法使其工作:

  1. 我在libs目錄中刪除了.jar文件,並添加了Cling和jetty dep作為maven依賴項。 我想如果您有一個自定義的jar,則應該執行相同的操作並將其發布到Maven存儲庫。

  2. 我跟蹤了另一個java.lang.NoClassDefFoundError:藝術不像Delvik那樣健談。

我的問題是我在Main.aar中使用了Cling庫中的某個類,並且在發布到Maven時,依從性不是傳遞的(但在本地編譯時沒有問題)。 因此,將Cling添加為Main.aar的部門可以解決我的問題。<br/>這將是一堂更仔細地跟蹤我的部門的課程。

要記住的一點是,生成的默認.pom文件將不包含出版物的依賴項:您必須在gradle任務中添加此類內容:

publishing {
    publications {
        aar(MavenPublication) {
            groupId packageName
            version = libraryVersion
            artifactId project.getName()

            // Tell maven to prepare the generated "*.aar" file for publishing
            artifact("$buildDir/outputs/aar/$artifactId-release.aar")

            //The publication doesn't know about our dependencies, so we have to manually add them to the pom
            pom.withXml {
                // for dependencies and exclusions
                def dependenciesNode = asNode().appendNode('dependencies')
                configurations.compile.allDependencies.each { dp ->
                    def dependencyNode = dependenciesNode.appendNode('dependency')
                    dependencyNode.appendNode('groupId', dp.group)
                    dependencyNode.appendNode('artifactId', dp.name)
                    dependencyNode.appendNode('version', dp.version)
                }
            }
        }
    }
}

另外,請記住gradle只會忽略您在.pom中添加的任何存儲庫。 因此,就我而言,由於Cling不在jcenter或MavenCentral上,因此我必須在lib的gradle中添加Cling存儲庫,但是該lib的未來用戶也必須添加它(否則Cling依賴關系將無法解決。 )

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM