2015-01-04 48 views
4

我是Maven的新手。
我嘗試做以下:
假設我們有項目A和B.項目B需要從一個 這裏進口的罐子使用一些classfrom_A的定義: pom.xml的項目中的:Maven:使用來自進口罐子的課程

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
    xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>A_Group</groupId> 
    <artifactId>A_Artifact</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    <name>A_Project</name> 
    <url>http://maven.apache.org</url> 
    <properties> 
    <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 
</project> 

這裏是項目B的pom.xml中(取決於A):

<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" 
     xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>B_Group</groupId> 
    <artifactId>B_Artifact</artifactId> 
    <version>1.0</version> 
    <packaging>jar</packaging> 
    <name>B_Project</name> 
    <url>http://maven.apache.org</url> 

    <properties> 
     <project.build.sourceEncoding>UTF-8</project.build.sourceEncoding> 
    </properties> 

    <dependencies> 
     <dependency> 
      <groupId>A_Group</groupId> 
      <artifactId>A_Artifact</artifactId> 
      <version>1.0</version> 
      <scope>compile</scope> 
     </dependency> 
    </dependencies> 
</project> 

下面是從項目乙代碼片斷:

import packageFromA.*; 
public class App { 
    public static void main(String[] args) { 
    classFromA ca = new ClassFromA; //from packageFromA 
    ca.someFunction();    
    } 
} 

我運行mvn沒有錯誤安裝用於A,然後對於B 但是試圖從IntelliJ IDEA的上述運行代碼時,得到了錯誤: 錯誤:(3,18)的java:包packageFromA不存在

正如我從maven文檔中所理解的:「編譯依賴關係在所有類路徑中都可用,並且它們被打包了」。但似乎導入的類仍然沒有解決。定義中缺少什麼?在此先感謝

更新:從IntelliJ運行時重新導入後解決問題。但是當我從命令行運行
java projectB
我是否需要顯式設置導入的jar類路徑?如果是的話,我需要指向我的本地maven倉庫(.m2/repository)嗎?由於

+0

'pom.xml'似乎很好,這更可能是一個IDE問題。你檢查過生成的'jar'嗎? – meskobalazs 2015-01-04 15:17:44

+0

感謝您的回覆。爲項目A生成的jar包含classFromA.class文件。應該mvn安裝更新類路徑嗎? – 2015-01-04 15:28:41

+0

但是項目B包含項目'jar'文件嗎?如果是這樣,那麼這是一個IDE問題。 – meskobalazs 2015-01-04 15:29:21

回答

2

在你的POM項目b。您可以添加配置了Maven的JAR-插件生成包含類路徑清單文件:

<project> 
    ... 
    <build> 
    <plugins> 
     ... 
     <plugin> 
     <groupId>org.apache.maven.plugins</groupId> 
     <artifactId>maven-jar-plugin</artifactId> 
     <version>2.5</version> 
     <configuration> 
      <archive> 
      <manifest> 
       <addClasspath>true</addClasspath> 
       <classpathPrefix>lib/</classpathPrefix> 
      </manifest> 
      </archive> 
     </configuration> 
     </plugin> 
     ... 
    </plugins> 
    </build> 

</project> 

這將設置classpath特性,在你的清單文件,它期望所有的依存庫文件都位於主jar的子目錄lib/中。您需要手動將這些庫複製到lib目錄中。

要使用maven爲所有依賴庫分配應用程序,可以使用maven assembly plugin

希望它有幫助!