IDEA与Maven在编译、构建、运行中涉及问题整理

Maven构建后class、jar、war等文件输出目录

Maven默认文件输出目录在根目录的target目录下,但是可以通过配置进行修改。

  1. ${project.build.directory}:/target目录。
  2. ${project.basedir}:pom.xml所在目录。

class文件输出位置修改

通过pom.xml增加如下配置

<build>
    <!-- ... -->
	<outputDirectory>${project.basedir}/src/main/webapp/WEB-INF/classes/</outputDirectory>
    <!-- ... -->
</build>

其他配置项

<build>	
    <!--该元素设置了项目源码目录,当构建项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 -->
    <sourceDirectory />
    <!--该元素设置了项目脚本源码目录,该目录和源码目录不同:绝大多数情况下,该目录下的内容 会被拷贝到输出目录(因为脚本是被解释的,而不是被编译的)。 -->
    <scriptSourceDirectory />
    <!--该元素设置了项目单元测试使用的源码目录,当测试项目的时候,构建系统会编译目录里的源码。该路径是相对于pom.xml的相对路径。 -->
    <testSourceDirectory />
    <!--被编译过的应用程序class文件存放的目录。 -->
    <outputDirectory />
    <!--被编译过的测试class文件存放的目录。 -->
    <testOutputDirectory />
</build>

jar文件输出位置修改

<build>
    <!-- ... -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-jar-plugin</artifactId>
        <configuration>
            <!-- 指定打包的jar包输出路径 -->
            <outputDirectory>D:\test</outputDirectory>
            <!--不打入jar包的文件类型或者路径 -->
            <excludes>
                <exclude>**/*.properties</exclude>
                <exclude>**/*.xml</exclude>
                <exclude>**/*.yml</exclude>
                <exclude>static/**</exclude>
                <exclude>templates/**</exclude>
            </excludes>
        </configuration>
    </plugin>
    <!-- ... -->
</build>     

war文件输出位置修改

<build>
    <!-- ... -->
    <plugin>
        <groupId>org.apache.maven.plugins</groupId>
        <artifactId>maven-war-plugin</artifactId>
        <configuration>
            <!-- 指定打包的jar包输出路径 -->
            <outputDirectory>D:\test</outputDirectory>
            <!--不打入jar包的文件类型或者路径 -->
            <excludes>
                <exclude>**/*.properties</exclude>
                <exclude>**/*.xml</exclude>
                <exclude>**/*.yml</exclude>
                <exclude>static/**</exclude>
                <exclude>templates/**</exclude>
            </excludes>
        </configuration>
    </plugin>
    <!-- ... -->
</build>     

IDEA项目配置编译输出目录

Proeject Structure -> Modules -> Paths -> Output path

image

Artifacts 项目打包方式

image

这一步实际是将maven与项目便也好的代码,按照实际部署情况进行打包。

IDEA 内tomcat配置后,实际运行项目地址

image

image

特殊说明

  1. 热部署仍需要安装Jrebel插件。
  2. 项目或maven指定编译后代码输出目录后,当项目未运行时,因IDEA内tomcat默认指向/target目录下项目,导致代码不生效,需要rebuild artifacts。
  3. 项目或maven指定编译后代码输出目录后,当项目运行时,因Jrebel热部署生效,应该是实时改变了JVM内运行的代码,所以代码可以生效。
  4. Run/Debug Configurations内,最好开启Build ProjectBuild Artifact配置(稳定,但是速度慢)。

遗留问题

  1. Jrebel热部署原理仍需要探索。
  2. 项目未运行时,编译后少量代码时,有没有不使用rebuild artifacts方式(耗时太久)。

巨人的肩膀

Maven POM

Maven打包到指定位置

Maven War 插件详解

理解idea中的project、module、artifact

posted @ 2023-07-21 09:13  疯狂马铃薯  阅读(181)  评论(0编辑  收藏  举报