2010-05-14 66 views
2

我有一些內部庫,我沒有/不知道如何添加到我的本地maven存儲庫。我已經將它們添加到項目的類路徑,但我的Maven的編譯失敗,說明它無法找到外部罐類(如預期):maven編譯失敗,因爲我有一個非maven jar

[ERROR] Failed to execute goal org.apache.maven.plugins:maven-compiler-plugin:2.0.2:compile (default-compile) on project proj: Compilation failure: Compilation failure: 
dir\src\main\java\package\MyClass.java:[8,25] package blah does not exist 

dir\src\main\java\package\MyClass.java:[9,25] package blah does not exist 

dir\src\main\java\package\MyClass.java:[21,12] cannot find symbol 
symbol : variable Blah 
location: class package.MyClass 

dir\src\main\java\package\MyClass.java:[28,9] cannot find symbol 
symbol : variable Blah 
location: class package.MyClass 

我如何告訴Maven的有關罐子我已經偷偷地添加到我的項目的類路徑中,以便它可以使用它來編譯?

回答

5

我不確定你可以訪問系統類路徑沒有很多的駭客。您可以執行其他兩件事之一:系統範圍依賴項或將其添加到本地回購。

要使用system dependency,只需爲每個要添加的jar添加一個條目即可。給他們的範圍「系統」,併爲每個添加一個<systemPath>。像這樣的東西。

<dependency> 
    <groupId>sun.jdk</groupId> 
    <artifactId>tools</artifactId> 
    <version>1.5.0</version> 
    <scope>system</scope> 
    <systemPath>${java.home}/../lib/tools.jar</systemPath> 
</dependency> 

如果您堅持更改位置和編譯時間,則可以使用-D jvm屬性。

將它們添加到local repo是有點痛苦,但更長期的解決方案。

+0

謝謝,工作正常。該jar存在於項目中,所以我只是使用'$ {basedir} /.../ jar.jar' – pstanton 2010-05-14 02:48:44

+1

+1「將它們添加到本地回購有點痛苦,但更長期的解決方案」部分的答案。系統依賴關係消耗了項目的可移植性。你會更好地維護這種依賴關係,就像你做其他任何事情一樣(並且在某些時候將它部署到已發佈的Maven倉庫)。 – whaley 2010-05-16 12:52:42