在使用maven编译时,是否有必要在/ src/main/java中使用.java文件?

use*_*920 4 java layout maven-2

我试图将一个项目转换为一个maven ...它的.java文件位于/ src/main/java之外的其他位置,当我运行maven install时,所有文件(.hbm,.xml)除了那些.class发生在我的罐子里.

这是pom.xml的构建部分:

<build>
    <resources>
        <resource>
            <directory>${basedir}/src</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes> 
        </resource>
    </resources>

    <plugins>
        <plugin>
            <artifactId>maven-compiler-plugin</artifactId>
            <configuration>
                <source>1.5</source>
                <target>1.5</target>
                <fork>true</fork>
                <compilerVersion>1.5</compilerVersion>
                <compilerArguments>
                    <encoding>UTF-8</encoding>
                </compilerArguments>
            </configuration>
        </plugin>
    </plugins>  
</build>
Run Code Online (Sandbox Code Playgroud)

使用上面的代码,我的jar中缺少.class文件...并且控制台上没有显示错误消息,是否需要将它们移动到/ src/main/java包结构?

还有,这种行为可能是什么原因,一些缺少依赖性?

我做了一个改变,将它们移动到src/main/java,我在控制台上得到了一些例外,但如果我"必须"将它们添加到这个"src/main/java"结构中,我仍然感到困惑......

请给我一个关于这个的想法......

谢谢

Jör*_*ann 9

您可以将源目录配置为与以下资源相同:

<build>
    <sourceDirectory>${basedir}/src</sourceDirectory>
    <resources>
        <resource>
            <directory>${basedir}/src</directory>
            <excludes>
                <exclude>**/*.java</exclude>
            </excludes>
        </resource>
    </resources>
</build>
Run Code Online (Sandbox Code Playgroud)


Pas*_*ent 5

它不是绝对必要的 - 它是可配置的 - 但Maven带有标准化的项目布局,强烈建议接受它,就像其他Maven惯例一样(不要与Maven对抗,采用它).

我知道您正在从Ant迁移到Maven,但是您在IMO上并没有走上正确的道路,因此弯曲Maven使其适合您现有的项目结构/工作流程并不是推荐的方法:

  1. Maven强烈建议使用其约定(过度配置)来缓解事情.不这样做会使事情变得更复杂并产生无用的配置开销.
  2. 当偏离默认值时,你自己就有点了.
  3. 不使用默认设置可能会导致不好的结果,一些(很差)的插件可能使用硬编码路径来实现(如src/main/java,target/classes等),不喜欢改变默认设置.
  4. 等等等

推荐的方法是将现有结构转换为maven兼容的模块化结构,并采用标准的Maven布局.

采用Maven标准和惯例只会让您的Maven生活更加轻松,并且您可以获得标准化的结构,Maven非常重视.

我认为有足够的人写了类似的建议,所以我不会坚持更多.但你应该听听这些建议(而不是坚持尝试让Maven适合你现有的结构),特别是因为你是Maven的新手.从我的角度来看,你不是从Ant迁移到Maven,而是试图将Maven迁移到Ant构建.

也可以看看