2016-11-24 55 views
1

我目前正面臨着使用命令行執行我的MUnit測試的問題。projectHelper.attachArtifact和project.getArtifact()之間的區別setFile

我正面臨着「重複項目工件分配」的問題使用1.0版本的mule-domain-maven-plugin that was fixed here版本。運行我的MUnit時,刪除這行代碼會在mule-domain-config.xml上導致FileNotFoundException。

反編譯代碼後,我可以看到,1.2(與我MUnits作品),具有2行代碼:

this.projectHelper.attachArtifact(this.project, "zip", domain); 
this.project.getArtifact().setFile(domain); 

我可以看到,1.3只有這一行:

this.projectHelper.attachArtifact(this.project, "zip", domain); 

有沒有人知道this.projectHelper.attachArtifact(this.project, "zip", domain);this.project.getArtifact().setFile(domain);之間的區別以及如何解決此問題?

回答

1

區別與主工件和附加工件之間的差異相同。首先,簡單來說,工件是一個包含指向它的Maven coordinates的對象(組編號/工件編號/版本/分類器/類型),存儲器在哪裏解決或解決它,以及一個文件,它是使用/下載/上傳的實際具體文件。

除了POM項目,Maven項目會生成一個主項目。這取決於它的包裝;例如一個包裝爲jar的項目將創建一個主要JAR項目,其文件包含項目的所有類別,而包裝爲war的項目將創建該Web應用程序。此外,該項目本身與其POM文件相關聯;這意味着一個項目不僅有主文物的文件,而且還有創建它的POM文件的參考。只有包裝pom的項目纔會創建主神器;這是因爲這些項目是父項目或聚合項目,其中包含要在多個項目之間共享的構建邏輯,但它們不會產生主要的可交付項目。

除此之外,一個項目已附加或輔助工件。它們對應於在構建項目期間也會生成的附加構件,並且與主構件的classifier和/或類型不同,自然也是它們的實際文件。這些附加工件與主要工件一起安裝和部署。例如,一個包裝jar的典型項目也會將其Javadoc和來源生成爲JAR文件,作爲具有分類器javadocsources的附件。因此,包裝pom的項目只能有附加的工件,因爲它沒有主要的工件。最後,完全允許有一個沒有附加工件的項目;只有主要項目(或者在pom項目中根本沒有)才能部署。

裏面一個Maven插件,所有這些因素歸結爲以下幾點:

舉例說明,我們可以考慮部署文物under org.mule.tools.maven in Central。根據工件ID mule-maven-plugin,有多個文件:

  • mule-maven-plugin-2.1.jar是主神器文件,
  • 這是由POM文件mule-maven-plugin-2.1.pom創建,
  • mule-maven-plugin-2.1-javadoc.jarmule-maven-plugin-2.1-sources.jar連接各自的分類。

作爲第二個例子,考慮工件ID mule-esb-maven-tools。部署的唯一文件(散列文件除外)爲mule-esb-maven-tools-1.1.pom。這是非常正常的,因爲它是一個POM項目,所以它沒有主要的工件(沒有JAR或其他部署);只有項目的POM文件,沒有附加的工件。

+0

很好的回答。太感謝了 –