2012-02-01 94 views
0

不同版本库的我有一个NetBeans的模块(Module.jar)在其pom.xml宣布很大的依赖性:构建模块与Maven的

<groupId>com.company</groupId> 
<artifactId>module</artifactId> 
<packaging>nbm</packaging> 
... 
<dependency> 
    <groupId>org.netbeans.api</groupId> 
    <artifactId>org-netbeans-modules-editor-lib</artifactId> 
    <version>${netbeans.version}</version> 
    <scope>runtime</scope> 
</dependency> 
<dependency> 
    <groupId>org.netbeans.api</groupId> 
    <artifactId>org-netbeans-modules-editor-lib2</artifactId> 
    <version>${netbeans.version}</version> 
</dependency> 
... 
<properties> 
    <netbeans.version>RELEASE701</netbeans.version> 
</properties> 

正如你可以看到,该版本被声明为变量netbeans.version

现在我有两个使用此模块的Netbeans平台应用程序:ApplicationA使用NB平台版本6.9.1和ApplicationB使用NB平台7.0.1。双方将宣布Module作为一个依赖:

<dependency> 
    <groupId>com.company</groupId> 
    <artifactId>module</artifactId> 
    <version>3.0.10</version> 
</dependency> 

Module编译罚款与平台的两个版本,但如果用同样的版本库的编译只会正常运行当前的应用程序使用(即Module会如果使用版本6.9.1进行编译,则只能在ApplicationA上正常运行,并且如果使用版本7.0.1进行编译,则只能在ApplicationB上正常运行)。

如何/在哪里可以定义变量netbeans.version,那么Module将根据将使用它的应用程序编译正确版本的库?

+0

你确定这是一个编译的问题,或者更确切地说,你的模块在不同版本的org-netbeans-modules-editor-lib中添加了运行时执行的事实吗? – mrembisz 2012-02-01 12:27:32

+0

为什么不直接将模块编译为较低版本并使NetBeans依赖项不可传递,或者在将模块添加到项目时将其排除?这样,项目将不得不定义netbeans版本,并且模块不会以传递方式添加该依赖项。 – Thomas 2012-02-01 12:31:13

+0

@mrembisz,它可能是它在运行时加载不同的版本 - 无论哪种方式,不应该在某个地方指定版本,所以它总是会加载正确的版本?也编辑的问题,因为一些(不是全部)库使用'运行时'。 – Marcelo 2012-02-01 12:34:50

回答

1

你应该在正确的版本中直接在ApplicationA和ApplicationB的poms中包含netbeans依赖。这样你将得到这个应用程序需要的确切版本。

+0

“模块”使用约30个独立于它的依赖关系(与'AppA'和'AppB'都没有关系)。将它复制到这两个应用程序的“pom.xml”是一个很好的做法/唯一的解决方案吗?我可以看到这可能很快成为维护灾难。 – Marcelo 2012-02-01 12:52:55

+0

@Marcelo只有当你想执行一个特定的版本时,你才需要复制依赖关系。您的问题描述表明ApplicationA确实依赖于6.9.1版本的NetBeans库,因此显式定义此依赖关系似乎很自然。 – mrembisz 2012-02-01 13:20:57

相关问题