我有一个Java OSGI项目,该项目使用XSD的jaxb2-maven-plugin生成了一些类。我用maven-bundle-plugin将其打包成捆。
我不明白为什么结果清单中的Import-Package标头引用了那些生成的软件包?为什么maven-bundle-plugin不将这些类视为本地类?
这是pom片段:
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>jaxb2-maven-plugin</artifactId>
<version>${jaxb2-maven-plugin.version}</version>
<executions>
<execution>
<phase>generate-sources</phase>
<goals>
<goal>xjc</goal>
</goals>
</execution>
</executions>
<configuration>
<!-- The schema directory or xsd files. -->
<sources>
<source>${basedir}/target/generated-sources/resources/model</source>
</sources>
<xjbSources>
<xjbSource>${basedir}/src/main/resources/jaxbBinding.xjb</xjbSource>
</xjbSources>
<xjcSourceExcludeFilters>
<filter implementation="org.codehaus.mojo.jaxb2.shared.filters.pattern.PatternFileFilter">
<patterns>
<pattern>\GBOCommon/Common.xsd</pattern>
</patterns>
</filter>
</xjcSourceExcludeFilters>
<outputDirectory>${basedir}/target/generated-sources/jaxb</outputDirectory>
</configuration>
</plugin>
<plugin>
<groupId>org.apache.felix</groupId>
<artifactId>maven-bundle-plugin</artifactId>
<version>${maven-bundle-plugin.version}</version>
<extensions>true</extensions>
<executions>
<execution>
<id>bundle-manifest</id>
<phase>process-classes</phase>
<goals>
<goal>manifest</goal>
</goals>
</execution>
</executions>
<configuration>
<instructions>
<Bundle-SymbolicName>${project.groupId}.${project.artifactId}</Bundle-SymbolicName>
<Export-Package>
{local-packages}, <!-- Since 2.2.0 you can also use {local-packages} inside <Export-Package> and it will be expanded to the set of local packages. -->
dozer <!-- To export Dozer mapping files -->
</Export-Package>
</instructions>
</configuration>
</plugin>
这是清单片段:
导入包:已生成;版本=“ [6.0,7)” ...
因此,“ generated”是从XSD生成的类(没有名称空间)的程序包名称。这些类在generate-sources阶段(在打包阶段之前)存放在“ target / generated-sources / jaxb”目录中。 maven-bundle-plugin知道,它应该将该目录中的所有软件包都包含在最终的bundle中。但是,如果是真的,为什么在“包含包”中提到它们?
此外,我应该说没有其他依赖项使用这些程序包-因此,此处不能进行任何传递导入。