Пустой путь к классу при добавлении <outputDirectory>в pom - PullRequest
4 голосов
/ 30 марта 2012

Я использую этот простой pom.xml для генерации OSGi-пакета, используя maven-bundle-plugin:

<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>de.test.osgi</groupId>
    <artifactId>test</artifactId>
    <version>0.0.1-SNAPSHOT</version>
    <packaging>bundle</packaging>
    <build>
        <plugins>
            <plugin>
                <groupId>org.apache.felix</groupId>
                <artifactId>maven-bundle-plugin</artifactId>
                <version>2.3.7</version>
                <extensions>true</extensions>
            </plugin>
        </plugins>
    </build>
</project>

Это работает, как и ожидалось (этот проект содержит один открытый класс, который, как я подтвердил, являетсяэкспортируется в связке).Теперь, если я добавлю следующее <configuration> в плагин:

<configuration>
    <outputDirectory>D:\Test</outputDirectory>
</configuration>

, сборка завершится с ошибкой:

[INFO] --- maven-bundle-plugin:2.3.7:bundle (default-cli) @ test ---
[WARNING] Bundle de.test.osgi:test:bundle:0.0.1-SNAPSHOT : Classpath is empty. Private-Package and Export-Package can only expand from the classpath when there is one
[WARNING] Bundle de.test.osgi:test:bundle:0.0.1-SNAPSHOT : Instructions in Private-Package, or -testpackages that are never used: .*
Classpath: 
[ERROR] Bundle de.test.osgi:test:bundle:0.0.1-SNAPSHOT : The JAR is empty: dot
[ERROR] Error(s) found in bundle configuration
[INFO] ------------------------------------------------------------------------
[INFO] BUILD FAILURE
[INFO] ------------------------------------------------------------------------
[INFO] Total time: 0.891s
[INFO] Finished at: Fri Mar 30 14:49:46 CEST 2012
[INFO] Final Memory: 8M/20M
[INFO] ------------------------------------------------------------------------
[ERROR] Failed to execute goal org.apache.felix:maven-bundle-plugin:2.3.7:bundle (default-cli) on project test: Error(s) found in bundle configuration -> [Help 1]

Почему путь к классу пуст?При чем тут <outputDirectory>?Это ошибка, или я что-то неправильно понял?

Редактировать Запуск с выходом отладки показывает, что путь к классу действительно идентичен <outputDirectory>.По умолчанию это каталог mavens target, поэтому он найдет классы для включения в комплект.Если я изменю его, он будет указывать на каталог, в котором нет классов для включения.Смущает, что в документации для плагина говорится, что <outputDirectory> это:

Каталог для сгенерированных пакетов.

Это ошибка?

Ответы [ 3 ]

2 голосов
/ 02 апреля 2012

outputDirectory - то, где скомпилированные классы были также написаны - ошибка относительно пустого "пути" к classpath происходит из-за предоставления maven-bundle-plugin пустой директории.

Плагин комплекта записывает MANIFEST.MF в расположение outputDirectory, и именно здесь он ожидает найти любые другие метаданные (например, выходные данные плагина scr) для комплекта.

Вы используете плагин компилятора? Если нет, то это выглядит как ошибка в плагине bundle, не учитывающая outputDirectory при вызове компилятора (но учитывающая его везде).

Как указывает @nobeh, вам будет хорошо, если ${project.build.outputDirectory} и outputDirectory указывают на одно и то же место.

1 голос
/ 30 марта 2012

Сначала я бы посоветовал проверить конфигурацию вашего пакета, и более того, я бы никогда не использовал абсолютный путь в конкретных зависимых от платформы путях, таких как D: \ и т. Д. С другой стороны, в Maven по умолчанию используется целевая папка для размещения созданного вывода.На основе документации должно быть больше конфигурации.

0 голосов
/ 30 марта 2012

Это дикое предположение, но попробуйте либо D:/Test, либо D:\\Test.

...