没有从native-maven-plugin设置basedir



我有一些问题得到maven本地插件的工作。问题是,我得到一个IllegalStateException:"没有basedir集"时编译。堆栈跟踪如下:

org.apache.maven.lifecycle.LifecycleExecutionException: Failed to execute goal org.codehaus.mojo:native-maven-plugin:1.0-alpha-7:compile (default-compile) on project native-ipc: Execution default-compile of goal org.codehaus.mojo:native-maven-plugin:1.0-alpha-7:compile failed: No basedir set
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:225)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84)
at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59)
at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183)
at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161)
at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319)
at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156)
at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537)
at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196)
at org.apache.maven.cli.MavenCli.main(MavenCli.java:141)
at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method)
at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:57)
at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:43)
at java.lang.reflect.Method.invoke(Method.java:601)
at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290)
at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230)
at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409)
at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352)
Caused by: org.apache.maven.plugin.PluginExecutionException: Execution default-compile of goal org.codehaus.mojo:native-maven-plugin:1.0-alpha-7:compile failed: No basedir set
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:110)
at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209)
... 19 more
Caused by: java.lang.IllegalStateException: No basedir set
at org.codehaus.plexus.util.DirectoryScanner.scan(DirectoryScanner.java:286)
at org.codehaus.mojo.natives.NativeSources.getFiles(NativeSources.java:183)
at org.codehaus.mojo.natives.NativeSources.getAllSourceFiles(NativeSources.java:240)
at org.codehaus.mojo.natives.plugin.NativeCompileMojo.execute(NativeCompileMojo.java:167)
at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101)
... 20 more

本机ipc pom.xml为:

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <modelVersion>4.0.0</modelVersion>
    <groupId>native-ipc</groupId>
    <artifactId>native-ipc</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>so</packaging>
<properties>
    <basedir>${project.basedir}</basedir>
</properties>
<parent>
    <groupId>com.discovix</groupId>
    <artifactId>discovix-parent</artifactId>
    <version>1.0-SNAPSHOT</version>
    <relativePath>../pom.xml</relativePath>
</parent>

<build>
    <plugins>
        <plugin>
            <groupId>org.codehaus.mojo</groupId>
            <artifactId>native-maven-plugin</artifactId>
            <extensions>true</extensions>
            <configuration>
                <javahOS>MacOS</javahOS>
                <sources>
                    <source>
                        <directory>src/main/cpp</directory>
                        <fileNames>
                            <fileName>ipc.cpp</fileName>
                        </fileNames>
                        <includes>
                            <include>${java.home}/include/*</include>
                        </includes>
                    </source>
                    <source>
                        <includes>
                            <include>/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/include/</include>
                            <include>/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/include/darwin/</include>
                        </includes>
                    </source>
                </sources>
                <linkerStartOptions>
                    <linkerStartOption>-shared -Wall</linkerStartOption>
                </linkerStartOptions>
                <compilerProvider>generic-classic</compilerProvider>
                <compilerExecutable>g++</compilerExecutable>
            </configuration>
            <executions>
                <execution>
                    <id>javah</id>
                    <phase>generate-sources</phase>
                    <configuration>
                        <javahOS>MacOS</javahOS>
                        <javahProvider>default</javahProvider>
                        <javahOutputDirectory>${project.build.directory}/custom-javah</javahOutputDirectory>
                        <workingDirectory>${project.basedir}</workingDirectory>
                        <javahClassNames>
                            <javahClassName>com.discovix.projects.glimmerglass.jni.posix.IPC</javahClassName>
                        </javahClassNames>
                        <goals>
                            <goal>javah</goal>
                        </goals>
                    </configuration>
                </execution>
            </executions>
        </plugin>
    </plugins>
</build>
<dependencies>
    <dependency>
        <groupId>com.discovix</groupId>
        <artifactId>network-analyzer</artifactId>
        <version>1.0-SNAPSHOT</version>
        <type>jar</type>
        <scope>compile</scope>
    </dependency>
</dependencies>
</project>

父元素是:

<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>com.discovix</groupId>
    <artifactId>discovix-parent</artifactId>
    <packaging>pom</packaging>
    <version>1.0-SNAPSHOT</version>
    <name>Discovix GlimmerGlass</name>
    <dependencies>
        <dependency>
            <groupId>junit</groupId>
            <artifactId>junit</artifactId>
            <version>4.8.1</version>
            <scope>test</scope>
        </dependency>
    </dependencies>
    <modules>
        <module>network-analyzer</module>
        <module>native-ipc</module>
        <module>generators</module>
    </modules>
    <build>
        <pluginManagement>
            <plugins>
                <plugin>
                    <groupId>org.codehaus.mojo</groupId>
                    <artifactId>native-maven-plugin</artifactId>
                </plugin>
            </plugins>
        </pluginManagement>
    </build>
</project>

我觉得我错过了一些明显的东西。如有任何帮助,不胜感激。

rb

如果有人遇到这种情况,问题似乎是标签顺序。我们将原始的pom.xml移到了macosx子模块中。下面的maven文件可以工作。

<?xml version="1.0" encoding="UTF-8"?>
<project>
    <modelVersion>4.0.0</modelVersion>
    <!-- @todo Break this out into a parent pom and child modules once we have multiple platforms to support. -->
    <groupId>com.discovix</groupId>
    <artifactId>macosx</artifactId>
    <version>1.0-SNAPSHOT</version>
    <packaging>jnilib</packaging>
    <name>JNI - MacOSX</name>
    <parent>
        <groupId>com.discovix</groupId>
        <artifactId>discovix-parent</artifactId>
        <version>1.0-SNAPSHOT</version>
        <relativePath>../pom.xml</relativePath>
    </parent>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>native-maven-plugin</artifactId>
                <extensions>true</extensions>
                <configuration>
                      <jdkIncludePath>/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/include</jdk IncludePath>
                    <javahOS>macosx</javahOS>
                    <javahOutputDirectory>${project.build.directory}/custom-javah</javahOutputDirectory>
                    <!-- demonstrate we can override location of javah generate directory and use javah -o option instead" -->
                    <javahOutputFileName>posix-ipc.h</javahOutputFileName>
                    <javahClassNames>
                    <javahClassName>com.discovix.projects.glimmerglass.jni.posix.IPC</javahClassName>
                    </javahClassNames>
                    <compilerProvider>generic</compilerProvider>
                    <compilerStartOptions>
                        <compilerStartOption>-fPIC -O</compilerStartOption>
                    </compilerStartOptions>
                    <sources>
                        <source>
                            <directory>../src/main/native</directory>
                            <fileNames>
                                <fileName>ipc.cpp</fileName>
                            </fileNames>
                        </source>
                        <source>
                            <directory>/Library/Java/JavaVirtualMachines/jdk1.7.0_11.jdk/Contents/Home/include/darwin</directory>
                            <includes>
                                <include>**/*.h</include>
                            </includes>
                        </source>
                    </sources>
                    <linkerStartOptions>
                        <linkerStartOption>-prebind -dynamiclib -lc -ldl</linkerStartOption>
                    </linkerStartOptions>
                </configuration>
            </plugin>
        </plugins>
    </build>
    <dependencies>
        <dependency>
            <groupId>com.discovix</groupId>
            <artifactId>network-analyzer</artifactId>
            <version>1.0-SNAPSHOT</version>
            <type>jar</type>
            <scope>compile</scope>
        </dependency>
    </dependencies>
</project>

这个问题是由于没有在<source>中定义<directory>引起的。在上面的问题中,你有:

<sources>
...
    <source>
        <includes>
            <include>/Library/Java/...</include>
            <include>/Library/Java/...</include>
        <includes>
    <source>
...
<sources>

注意没有<directory>标签!

我在目录标记中使用Maven属性时遇到了类似的问题。不幸的是,Maven属性是未定义的。是的,我花了一段时间才找到。

最新更新