2015-09-09 79 views
1

我有一個很奇怪的問題。前段時間我分叉liquibase-hibernate,因爲我找到了bug並解決了它。maven liquibase插件沒有找到jitpack依賴關係

雖然這pull request beeing接受,我部署我的liquibase-hibernate4插件到本地artifactory,一切都OK。

但現在它出現了問題。我必須在一個項目中使用這個依賴項,我不能使用我的本地工具。所以我用JitPack存儲庫這樣:

新增JitPack在pom.xml庫:

<repositories> 
... 
    <repository> 
    <id>jitpack.io</id> 
    <url>http://jitpack.io</url> 
    </repository> 
... 
</repositories> 

然後加入依賴:

... 
<dependency> 
    <groupId>org.liquibase</groupId> 
    <artifactId>liquibase-core</artifactId> 
    <version>3.4.1</version> 
</dependency> 

<dependency> 
    <groupId>com.github.malaguna</groupId> 
    <artifactId>liquibase-hibernate</artifactId> 
    <version>liquibase-hibernate4-3.6.1</version> 
</dependency> 

我跑mvn compilemvn package和它工作得很好。但是我也配置了maven-liquibase-plugin,並在內部包含相同的依賴關係,因爲插件無法正常工作。

<plugin> 
    <groupId>org.liquibase</groupId> 
    <artifactId>liquibase-maven-plugin</artifactId> 
    <version>3.4.1</version> 

    <configuration> 
    <propertyFile>target/classes/liquibase.properties</propertyFile> 
    </configuration> 

    <dependencies> 
    <dependency> 
     <groupId>com.github.malaguna</groupId> 
     <artifactId>liquibase-hibernate</artifactId> 
     <version>liquibase-hibernate4-3.6.1</version> 
    </dependency> 

.... 

現在,當我運行mvn resources:resources liquibase:diff我可以看到行家如何試圖從Maven的中央讓我liquibase-休眠神器:

[INFO] --- liquibase-maven-plugin:3.4.1:diff (default-cli) @ project --- 
Downloading: http://repo.maven.apache.org/maven2/com/github/malaguna/liquibase-hibernate/liquibase-hibernate4-3.6.1/liquibase-hibernate-liquibase-hibernate4-3.6.1.jar 
... 

然後它失敗

[ERROR] Failed to execute goal org.liquibase:liquibase-maven-plugin:3.4.1:diff 
(default-cli) on project xxxxx: Execution default-cli of goal 
org.liquibase:liquibase-maven-plugin:3.4.1:diff failed: 
Plugin org.liquibase:liquibase-maven-plugin:3.4.1 or one of its 
dependencies could not be resolved: Could not find artifact 
com.github.malaguna:liquibase-hibernate:jar:liquibase-hibernate4-3.6.1 in central 
(http://repo.maven.apache.org/maven2) -> [Help 1] 

爲什麼maven試圖從maven central,而不是jitpack,從maven-liquibase-plugin調用時下載工件?我怎樣才能避免這種情況?

正如我之前所說的,當運行編譯或包時它運行良好,工件被下載。

+0

是否在'〜/ .m2/settings.xml'中設置了代理? –

+0

不,我有兩個設置,一個用於artifactory,另一個沒有配置。它與artifactory運行良好,因爲artifactory通過codehaus-cache找到jitpack artifact。問題來了,如果我不想使用artifactory。 – malaguna

+1

liquibase-maven-plugin是否尊重「外部」存儲庫設置?看起來他們正在旋轉一個單獨的配置,它不考慮你的存儲庫配置。 –

回答

3

Maven區分工件存儲庫和插件存儲庫,請參閱RepositoriesPlugin_Repositories。所以你的情況,你必須提供

<pluginRepositories> 
    <pluginRepository> 
     <id>jitpack.io</id> 
     <url>http://jitpack.io</url> 
    </pluginRepository> 
</pluginRepositories> 

插件的依賴關係是指通過

<plugin> 
    <dependencies> 
     <dependency> 
      .... 
     </dependency> 
    </dependencies> 
</plugin> 

因爲你已經注意到了。

+1

我剛剛測試過您的解決方案,它的工作原理。我編輯你的答案,因爲它是'pluginRepository'而不是'repository'的錯誤,但是一旦改變,它的工作就完美了。謝謝!我試圖給你賞金,但我不能,我必須等待四個小時。 – malaguna