我正在使用Maven构建这个多模块项目。根目录下项目的文件夹结构如下:
core (dir)
|--- pom.xml
|--- pom (dir)
|---com.loc.dist.core.msp.osgi.pom (dir)
|---pom.xml
|--- com.lgc.dist.core.msp.example.helloservice.client (dir)
|---pom.xml
项目com.lgc.dist.core.msp.example.helloservice.client
打包为OSGI bundle
,它是com.loc.dist.core.msp.osgi.pom
<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>
<parent>
<groupId>com.lgc.dist</groupId>
<artifactId>com.lgc.dist.core.msp.osgi.pom</artifactId>
<relativePath>../pom/com.lgc.dist.core.msp.osgi.pom</relativePath>
<version>0.1</version>
</parent>
<artifactId>com.lgc.dist.core.msp.example.helloservice.client</artifactId>
<packaging>bundle</packaging>
<dependencies>
<dependency>
<groupId>com.lgc.dist</groupId>
<artifactId>com.lgc.dist.core.msp.service</artifactId>
<version>0.1</version>
</dependency>
</dependencies>
<build>
<plugins>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<configuration>
<instructions>
<Export-Package>com.lgc.dist.core.msp.example.helloservice.client.*;version=${project.version}</Export-Package>
<Private-Package>com.lgc.dist.core.msp.example.helloservice.client.internal</Private-Package>
<Import-Package>*</Import-Package>
</instructions>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-scr-plugin</artifactId>
</plugin>
</plugins>
</build>
</project>
顶级pom.xml
显示pom
文件夹,com.lgc.dist.core.msp.example.helloservice.client
位于反应堆列表中。
<modules>
<module>pom</module>
<module>com.lgc.dist.core.msp.example.helloservice.client</module>
</modules>
当我从根运行mvn clean install
时,它往往会背靠背构建com.lgc.dist.core.msp.example.helloservice.client
两次。可以安装两次,但是当我运行mvn deploy
时会造成麻烦。所有其他子模块只构建一次。只有com.loc.dist.core.msp.osgi.pom
的子模块正在构建两次。我猜osgi默认构建所有的bundle模块。但是如果我在pom.xml中对它进行评论,那么osgi bundle模块根本就不会构建。我该怎么做才能一次构建这些OSGI包呢?
编辑如果我将打包模式从bundle
更改为jar
,它可以正常工作,但这会影响使用OSGI包的目的。
答案 0 :(得分:1)
自项目&#34; com.lgc.dist.core.msp.example.helloservice.client &#34;不是顶级pom.xml的直接子项,请从那里删除它。
因此,在顶级pom.xml中,条目应为:
<modules>
<module>pom/com.loc.dist.core.msp.osgi.pom</module>
</modules>
pom / com.loc.dist.core.msp.osgi.pom中的pom.xml应该有:
<modules>
<module>com.lgc.dist.core.msp.example.helloservice.client</module>
</modules>
答案 1 :(得分:0)
经过一些研究,结果是maven-bundle-plugin
2.5.4默认情况下部署捆绑包。根据{{3}}的答案之一(我很惊讶它没有获得任何投票),你需要通过添加执行块来停止部署
<executions>
<execution>
<id>default-deploy</id>
<phase>no-execute</phase>
<goals>
<goal>deploy</goal>
</goals>
</execution>
</executions>
现在正在运作。
编辑,根据此答案的评论,它在2.5.5中得到解决。但是哈文没试过。