maven javadoc非法包名错误

时间:2016-06-22 19:27:26

标签: java maven javadoc

运行mvn javadoc:javadoc

时出现以下错误
  

[ERROR]退出代码:1 - javadoc:错误 - 包名称非法:   " edu.princeton.cs.1-Fundamentals.1-1-BasicProgModel"

我很清楚的原因,但我不知道如何解决它。

这是我在src/main/java/edu/princeton/cs/文件夹中的src文件结构。

├── 1-Fundamentals
│   ├── 1-1-BasicProgModel
│   ├── 1-2-DataAbstraction
│   ├── 1-3-BagsQueuesStacks
│   ├── 1-4-AnalysisOfAlgorithms
│   └── 1-5-UnionFind
├── 2-Sorting
│   ├── 2-1-ElementarySorts
│   ├── 2-2-Mergesort

在每个目录中,java代码包含package edu.princeton.cs.algs4;

这意味着文件夹名称不是包名称。 但是,javadoc错误地认为文件夹名称是包名称。

我怎样才能让maven知道没有像edu.princeton.cs.1-Fundamentals.1-1-BasicProgModel

这样的包

2 个答案:

答案 0 :(得分:1)

你正在尝试使用Maven来反对它的惯例。默认情况下,除非明确说明,否则项目的源根位于src/main/java下。这意味着下面的任何目录都将被视为包名称的一部分,因此必须与.java源文件中声明的包名匹配。

现在,您可以覆盖约定,并告诉Maven将另一个目录视为源根目录,以便javac或javadoc按预期工作:

::pom.xml:

<?xml version="1.0" encoding="UTF-8"?>
<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>example</groupId>
    <artifactId>example</artifactId>
    <version>1.0-SNAPSHOT</version>
    <build>
        <!--Overrides the default:-->
        <!--<sourceDirectory>src/main/java</sourceDirectory>-->
        <sourceDirectory>./path/relative/to/pom.xml/</sourceDirectory>
    </build>
</project>

由于此项目中有多个源根,因此您可以考虑为每个源添加单独的pom.xml,或者更改布局并使用pom.xml中的其他插件添加其他源目录:

项目结构:

    Project Directory
    ├── 1-Fundamentals
    │   ├── 1-1-BasicProgModel
    │   │   ├──src
    │   │   │  └──edu/princeton/cs/algs4 (only classes and directories matching packages)
    │   │   │     ├── JavaClass1.java
    │   │   │     └── JavaClass2.java
    │   │   └── other non source content
    │   ├── 1-2-DataAbstraction
    │   │   ├──src
    │   │   │  └──edu/princeton/cs/algs4
    │   │   │     ├── JavaClass3.java
    │   │   │     └── JavaClass4.java
    │   │   └── other non source content
    │   └── 1-3-BagsQueuesStacks
    │       ├──src
    │       │  └──edu/princeton/cs/algs4
    │       │     ├── JavaClass5.java
    │       │     └── JavaClass6.java
    │       └── other non source content
    └── pom.xml

告诉maven源根源在哪里:

<?xml version="1.0" encoding="UTF-8"?>
<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>example</groupId>
    <artifactId>example</artifactId>
    <version>1.0-SNAPSHOT</version>

    <build>
        <plugins>
            <plugin>
                <groupId>org.codehaus.mojo</groupId>
                <artifactId>build-helper-maven-plugin</artifactId>
                <executions>
                    <execution>
                        <phase>generate-sources</phase>
                        <goals><goal>add-source</goal></goals>
                        <configuration>
                            <sources>
                                <source>1-Fundamentals/1-1-BasicProgModel/src</source>
                                <source>1-Fundamentals/1-2-DataAbstraction/src</source>
                                <source>1-Fundamentals/1-3-BagsQueuesStacks/src</source>
                            </sources>
                        </configuration>
                    </execution>
                </executions>
            </plugin>
        </plugins>
    </build>
</project>

答案 1 :(得分:0)

您的路径是否包含空格。如果任何目录名称包含空格,则 javadoc 插件似乎失败了。

示例:

糟糕的路线:我的项目/项目 java/我的新游戏

好的路线:MyProject/Project-java/My-new-game