2016-07-26 127 views
4

我有兩個Maven模塊,AppManager和myApp。這些目錄位於本地的同一目錄中,並且在公司的在線回購中不可用,因爲它們用於測試目的。在IntelliJ中,我使用AppManager的字段和方法沒有問題,並且沒有錯誤消息。我在myApp的impl pom文件中導出com.mycompany.appManager。但是,當我在IDE之外構建時(即mvn clean install),存在包com.mycompany.appManager不存在的包的錯誤,然後爲appManager中定義的公用字段的使用未解決的符號關聯了錯誤。我該如何解決這個問題?我已經嘗試導出並添加依賴項,但這兩個解決方案不起作用。Maven構建失敗:包不存在

的pom.xml:

<moduleVersion>4.0.0</moduleVersion> 
<parent> 
    <groupId>com.myCompany</groupId> 
    <artifactId>myApp</artifactId> 
    <version>1.0-SNAPSHOT</version> 
</parent> 

<groupId>com.myCompany.myApp</groupId> 
<artifactId>com.myCompany.myApp.impl</artifactId> 
<packaging>bundle</packaging> 
<name>My App Implementation</name> 

<build> 
    <plugins> 
     <plugin> 
      <groupId>org.apache.felix</groupId> 
      <artifactId>maven-bundle-plugin</artifactId> 
      <extensions>true</extensions> 
      <configuration> 
       <instructions> 
        <Export-Package> 
          com.myCompany.appmanager 
        </Export-Package> 
        <Bundle-Activator>com.mycompany.myapp.impl.component</Bundle-Activator> 
       </instructions> 
      </configuration> 
     </plugin> 
    </plugin> 
</build> 

編譯錯誤:

[ERROR] /root/Desktop/apps/myapp/impl/src/main/java/com/mycompany/myApp/impl/component.java:[11,49] package com.mycompany.appmanager does not exist 
[ERROR] /root/Desktop/apps/myapp/impl/src/main/java/com/mycompany/myApp/impl/component.java:[64,49] cannot find symbol 
    symbol: variable AppManagerModule 
    location: class com/mycompany/myApp/impl/component 
+0

請發佈您的pom.xml和完整的錯誤日誌。 –

+0

缺少的包實際上是一個運行時依賴項,這就是爲什麼從命令行進行編譯失敗的原因。然而,Maven IntelliJ插件將忽略範圍規則,並且只是拉取每個依賴項,導致成功的編譯和運行。 –

回答

5

我嘗試儘可能我的理解來回答這個問題:

如果你有兩個項目A和B而A取決於B,那麼你必須先建立B.如果你使用mvn clean install,那麼B.jar將被放入您的本地存儲庫。之後,你可以建立一個反對它(如果你選擇在POM中正確的版本)。

+0

這樣做!謝謝 – SVN600

0

爲了完整起見,如果您有兩個項目A和B,而A依賴於B,則還必須確保您的B項目中的代碼存在於編譯的jar中。顯然你必須在src/main/java(而不是src/test/java)中編寫你的程序包,如果你想讓它們可見的話。