緣由:父子模塊項目必須保證父模塊pom deploy後,再 deploy 子模塊才能被引用到,或者直接 deploy 父 pom 將整個項目模塊deploynginx
在A /pom.xml中:maven
<groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>0.1-SNAPSHOT</version> <packaging>pom</packaging>
在B /pom.xml中,我有:spa
<parent> <groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>0.1-SNAPSHOT</version> </parent> <groupId>com.dummy.bla.sub</groupId> <artifactId>kid</artifactId>
我想要B從父級繼承版本,因此我須要把0.1-SNAPSHOT
放在A/pom.xml
中的惟一地方就是A/pom.xml
。可是,若是我從父節下的B/pom.xml
中刪除<version>0.1-SNAPSHOT</version>
,maven會抱怨父級的缺乏版本。code
有沒有辦法我可使用${project.version}
或相似的東西,以免在兩個poms中有01.-SNAPSHOT
?xml
不,沒有。您必須指定父級版本。幸運的是,它被繼承爲模塊的版本,在大多數狀況下是理想的。此外,這個父母的版本聲明由Maven Release Plugin自動觸發,因此 – 實際上,只要你使用Maven Release Plugin發佈或者只是碰撞版本,你就能夠在2個地方使用版本。繼承
請注意,在某些狀況下,此行爲其實是可行的,並提供了更多的靈活性,您可能須要。有時你想使用一些之前的父母的版原本繼承,但這不是主流的狀況。it
緣由:雖然此方案本地編譯安裝能夠;但 deploy到私服,外部仍然不能引用。由於${global.version}會打進父 pom和子jar包而不是替換,但引用外部jar包時,該jar 的父模塊版本須要肯定io
Maven不是以這種方式工做,而是爲了實現這一目標而存在一種解決方法(多是反作用,你將不得不嘗試一下)。訣竅是告訴孩子項目經過它的相對路徑而不是純粹的maven座標找到它的父項,並且外部化一個屬性中的版本號:編譯
<groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>${global.version}</version> <packaging>pom</packaging> <properties> <!-- Unique entry point for version number management --> <global.version>0.1-SNAPSHOT</global.version> </properties>
<parent> <groupId>com.dummy.bla</groupId> <artifactId>parent</artifactId> <version>${global.version}</version> <relativePath>..</relativePath> </parent> <groupId>com.dummy.bla.sub</groupId> <artifactId>kid</artifactId>
我把這個伎倆用於個人一個項目一段時間,沒有任何具體問題,除了maven在構建開始時記錄了不少警告,這不是很優雅。class
彷佛maven 3.0.4不容許這樣的配置了。
最簡單的更新版本imo的方法:
mvn versions:set -DgenerateBackupPoms=false
(在您的根/父pom文件夾中這樣作)。
你的poms被解析,你被問到要設置哪一個版本。
是的,但您也可使用"mvn release:update-versions -DdevelopmentVersion={version}"
來更新POM中的版本號