Maven之POM文件build标签详解

article/2025/10/16 21:56:20

文章目录

  • 1. 重新认识pom文件
  • 2. 重要标签详解
    • 2.1 dependencyManagement标签
    • 2.2 build标签
      • 2.2.1 约定的目录结构
      • 2.2.2 备用插件管理
      • 2.2.3 生命周期插件
        • 2.3.3.1 坐标部分
        • 2.3.3.2 执行部分
  • 3. 典型应用
    • 3.1 指定 JDK 版本
      • 3.1.1 提出问题
      • 3.1.2 暂时取消 settings.xml 配置
      • 3.1.3 编写源文件代码
      • 3.1.4 配置构建过程
      • 3.1.5 两种配置方式比较
      • 3.1.6 补充说明
        • configuration标签中source 标签含义
        • target 标签含义
    • 3.2 SpringBoot 定制化打包
      • 3.2.1 需求
      • 3.2.2 示例代码
      • 3.2.3 插件的七个目标
    • 3.3 Mybatis 逆向工程
    • 3.4 小结
  • 附录:完整 build 标签

1. 重新认识pom文件

我们都知道,Maven 是一款项目构建管理和依赖管理的工具,但事实上这只是 Maven 的一部分功能,Maven 本身的产品定位是一款项目管理工具。

下面是 spring-boot-starterPOM 文件,可以看到:除了熟悉的GAV坐标标签、dependencies 标签,还有 descriptionurlorganizationlicensesdevelopersscmissueManagement 等这些描述项目信息的标签。

<?xml version="1.0" encoding="UTF-8"?>
<project xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/xsd/maven-4.0.0.xsd" xmlns="http://maven.apache.org/POM/4.0.0"xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance"><modelVersion>4.0.0</modelVersion><groupId>org.springframework.boot</groupId><artifactId>spring-boot-starter</artifactId><version>2.5.6</version><name>spring-boot-starter</name><description>Core starter, including auto-configuration support, logging and YAML</description><url>https://spring.io/projects/spring-boot</url><organization><name>Pivotal Software, Inc.</name><url>https://spring.io</url></organization><licenses><license><name>Apache License, Version 2.0</name><url>https://www.apache.org/licenses/LICENSE-2.0</url></license></licenses><developers><developer><name>Pivotal</name><email>info@pivotal.io</email><organization>Pivotal Software, Inc.</organization><organizationUrl>https://www.spring.io</organizationUrl></developer></developers><scm><connection>scm:git:git://github.com/spring-projects/spring-boot.git</connection><developerConnection>scm:git:ssh://git@github.com/spring-projects/spring-boot.git</developerConnection><url>https://github.com/spring-projects/spring-boot</url></scm><issueManagement><system>GitHub</system><url>https://github.com/spring-projects/spring-boot/issues</url></issueManagement><dependencies><dependency>……</dependency></dependencies>
</project>

从项目管理的角度来看,Maven 提供了如下这些功能:

  • 项目对象模型(POM):将整个项目本身抽象、封装为应用程序中的一个对象,以便于管理和操作。
  • 全局性构建逻辑重用:Maven 对整个构建过程进行封装之后,程序员只需要指定配置信息即可完成构建。
  • 构件的标准集合:在 Maven 提供的标准框架体系内,所有的构件都可以按照统一的规范生成和使用。
  • 构件关系定义:Maven 定义了构件之间的三种基本关系,让大型应用系统可以使用 Maven 来进行管理
    • 继承关系:通过从上到下的继承关系,将各个子构件中的重复信息提取到父构件中统一管理
    • 聚合关系:将多个构件聚合为一个整体,便于统一操作
    • 依赖关系:Maven 定义了依赖的范围、依赖的传递、依赖的排除、版本仲裁机制等一系列规范和标准,让大型项目可以有序容纳数百甚至更多依赖
  • 插件目标系统:Maven 核心程序定义抽象的生命周期,然后将插件的目标绑定到生命周期中的特定阶段,实现了标准和具体实现解耦合,让 Maven 程序极具扩展性
  • 项目描述信息的维护:我们不仅可以在 POM 中声明项目描述信息,更可以将整个项目相关信息收集起来生成 HTML 页面组成的一个可以直接访问的站点。这些项目描述信息包括:
    • 公司或组织信息
    • 项目许可证
    • 开发成员信息
    • issue 管理信息
    • SCM 信息

2. 重要标签详解

2.1 dependencyManagement标签

该标签用来在根pom中管理jar包版本,如果后面的jar包没有申明版本,会以这里面的版本为主,使用该标签并不会引入jar包,一般是在父级pom文件申明,方便管理jar包版本

2.2 build标签

在实际使用 Maven 的过程中,会发现 build 标签有时候有,有时候没,这是怎么回事呢?其实通过有效 POM 我们能够看到,build 标签的相关配置其实一直都在,只是在我们需要定制构建过程的时候才会通过配置 build 标签覆盖默认值或补充配置。这一点我们可以通过打印有效 POM 来看到。

完整 build 标签示例在文章末尾,从中能够看到,build 标签的子标签大致包含三个主体部分:

2.2.1 约定的目录结构

参考附录中的如下部分:

<sourceDirectory>D:\idea\maven-test\src\main\java</sourceDirectory>
<scriptSourceDirectory>D:\idea\maven-test\src\main\scripts</scriptSourceDirectory>
<testSourceDirectory>D:\idea\maven-test\src\test\java</testSourceDirectory>
<outputDirectory>D:\idea\maven-test\target\classes</outputDirectory>
<testOutputDirectory>D:\idea\maven-test\target\test-classes</testOutputDirectory>
<resources><resource><directory>D:\idea\maven-test\src\main\resources</directory></resource>
</resources>
<testResources><testResource><directory>D:\idea\maven-test\src\test\resources</directory></testResource>
</testResources>
<directory>D:\idea\maven-test\target</directory>

能看到各个目录的作用如下:

目录名作用
sourceDirectory主体源程序存放目录
scriptSourceDirectory脚本源程序存放目录
testSourceDirectory测试源程序存放目录
outputDirectory主体源程序编译结果输出目录
testOutputDirectory测试源程序编译结果输出目录
resources主体资源文件存放目录
testResources测试资源文件存放目录
directory构建结果输出目录

2.2.2 备用插件管理

pluginManagement 标签存放着几个极少用到的插件:

  • maven-antrun-plugin
  • maven-assembly-plugin
  • maven-dependency-plugin
  • maven-release-plugin

通过 pluginManagement 标签管理起来的插件就像 dependencyManagement 一样,子工程使用时可以省略版本号,起到在父工程中统一管理版本的效果,看下面例子:

  • spring-boot-dependencies 管理的插件信息:
<build><pluginManagement><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.6.2</version></plugin></pluginManagement>
</build>
  • 子工程使用的插件信息:
<build><plugins><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId></plugin></plugins>
</build>

2.2.3 生命周期插件

plugins 标签存放的是默认生命周期中实际会用到的插件,这些插件应该都不陌生,所以抛开插件本身不谈,来看看 plugin 标签的结构:

<plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><executions><execution><id>default-compile</id><phase>compile</phase><goals><goal>compile</goal></goals></execution><execution><id>default-testCompile</id><phase>test-compile</phase><goals><goal>testCompile</goal></goals></execution></executions>
</plugin>

2.3.3.1 坐标部分

artifactId version 标签定义了插件的坐标,作为 Maven 的自带插件这里省略了 groupId

2.3.3.2 执行部分

executions 标签内可以配置多个 execution 标签,execution 标签内:

  • id:指定唯一标识
  • phase关联的生命周期阶段
  • goals/goal关联指定生命周期的目标
    • goals 标签中可以配置多个 goal 标签,表示一个生命周期环节可以对应当前插件的多个目标。

phase元素代表的是绑定的生命周期的阶段
goals元素代表插件的目标,插件是前面artifactId中定义好的,goals相当于该插件中的一个功能,该功能将在phase绑定的生命周期阶段执行

另外,插件目标的执行过程可以进行配置,例如 maven-site-plugin 插件的 site 目标:

<execution><id>default-site</id><phase>site</phase><goals><goal>site</goal></goals><configuration><outputDirectory>D:\idea\maven-test\target\site</outputDirectory><reportPlugins><reportPlugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-project-info-reports-plugin</artifactId></reportPlugin></reportPlugins></configuration>
</execution>

configuration 标签内进行配置时使用的标签是插件本身定义的。

结论:每个插件能够做哪些设置都是各个插件自己规定的。

3. 典型应用

3.1 指定 JDK 版本

3.1.1 提出问题

可以在Maven的配置文件中 settings.xml 中配置了 JDK 版本,那么将来把 Maven 工程部署都服务器上,脱离了settings.xml配置,如何保证程序正常运行呢?思路就是直接把 JDK 版本信息告诉负责编译操作的 maven-compiler-plugin 插件,让它在构建过程中,按照指定的信息工作

3.1.2 暂时取消 settings.xml 配置

为了测试对maven-compiler-plugin插件进行配置的效果,暂时取消配置文件settings.xml中的 profile 配置。

<!-- 配置Maven工程的默认JDK版本 -->
<!-- <profile><id>jdk-1.8</id><activation><activeByDefault>true</activeByDefault><jdk>1.8</jdk></activation><properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><maven.compiler.compilerVersion>1.8</maven.compiler.compilerVersion></properties>
</profile> -->

3.1.3 编写源文件代码

很明显这里用到了 Lambda 表达式,这是 JDK 1.8 才支持的语法

package com.scorpios.maven;public class Hello {public void hello() {new Thread(()->{System.out.println("thread ...");}).start();}
}

3.1.4 配置构建过程

<!-- build 标签:意思是告诉 Maven,你的构建行为,我要开始定制了! -->
<build><!-- plugins 标签:Maven 你给我听好了,你给我构建的时候要用到这些插件! --><plugins><!-- plugin 标签:这是我要指定的一个具体的插件 --><plugin><!-- 插件的坐标。此处引用的 maven-compiler-plugin 插件不是第三方的,是一个 Maven 自带的插件。 --><groupId>org.apache.maven.plugins</groupId><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><!-- configuration 标签:配置 maven-compiler-plugin 插件 --><configuration><!-- 具体配置信息会因为插件不同、需求不同而有所差异 --><source>1.8</source><target>1.8</target><encoding>UTF-8</encoding></configuration></plugin></plugins>
</build>

3.1.5 两种配置方式比较

  • settings.xml 中配置:仅在本地生效,如果脱离当前 settings.xml 能够覆盖的范围,则无法生效
  • 在当前 Maven 工程 pom.xml 中配置:无论在哪个环境执行编译等构建操作都有效

3.1.6 补充说明

configuration标签中source 标签含义

调用 Java 编译器命令时传入的-source参数。那对编译器来说,-source 参数是啥意思呢?

在这里插入图片描述

『提供与指定发行版的源兼容性』这句话理解是:

  • 我们写代码是按 JDK 1.8 写的——这就是『源兼容性』里的『源』。
  • 指定发行版就是我们指定的 JDK 1.8。

这个功能还可以通过在 properties 标签中配置 maven.compiler.source 属性来实现。所以也经常会看到类似这样的配置:

<properties><maven.compiler.source>1.8</maven.compiler.source><maven.compiler.target>1.8</maven.compiler.target><project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>

target 标签含义

调用 Java 编译器命令时传入的-target参数。那对编译器来说,-target 参数是啥意思呢?
在这里插入图片描述

『生成特定 VM 版本的类文件』这句话理解是:

  • VM JVM
  • 类文件指 *.class 字节码文件
  • 整体意思就是源文件编译后,生成的 *.class 字节码文件要符合指定的 JVM 版本

3.2 SpringBoot 定制化打包

3.2.1 需求

很显然 spring-boot-maven-plugin 并不是 Maven 自带的插件,而是 SpringBoot 提供的,用来改变 Maven 默认的构建行为。具体来说是改变打包的行为。默认情况下 Maven 调用 maven-jar-plugin 插件的 jar 目标,生成普通的 jar 包。

普通 jar 包没法使用java -jar xxx.jar这样的命令来启动、运行,但是 SpringBoot 的设计理念就是每一个微服务导出为一个 jar 包,这个 jar 包可以使用 java -jar xxx.jar 这样的命令直接启动运行。

这样一来,打包的方式肯定要进行调整。所以 SpringBoot 提供了 spring-boot-maven-plugin 这个插件来定制打包行为。

3.2.2 示例代码

所有的一切已经都被 SpringBoot 封装好了,所以配置非常简单,提供插件坐标即可。

<!-- build 标签:用来配置对构建过程的定制 -->
<build><!-- plugins 标签:定制化构建过程中所使用到的插件 --><plugins><!-- plugin 标签:一个具体插件 --><plugin><groupId>org.springframework.boot</groupId><artifactId>spring-boot-maven-plugin</artifactId><version>2.5.5</version></plugin></plugins>
</build>

3.2.3 插件的七个目标

在这里插入图片描述

目标名称作用
spring-boot:build-image使用构建包将应用程序打包到OCI映像中
spring-boot:build-info生成Actuator使用的构建信息文件build-info.properties
spring-boot:help配置pom.xml文件
spring-boot:repackage默认goal。在mvn package之后,再次打包可执行的jar/war,同时保留mvn package生成的jar/war为.origin
spring-boot:run运行Spring Boot应用
spring-boot:start在mvn integration-test阶段,进行Spring Boot应用生命周期的管理
spring-boot:stop在mvn integration-test阶段,进行Spring Boot应用生命周期的管理

3.3 Mybatis 逆向工程

使用 Mybatis 的逆向工程需要使用如下配置,MBG 插件的特点是需要提供插件所需的依赖:

<!-- 控制 Maven 在构建过程中相关配置 -->
<build><!-- 构建过程中用到的插件 --><plugins><!-- 具体插件,逆向工程的操作是以构建过程中插件形式出现的 --><plugin><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-maven-plugin</artifactId><version>1.3.0</version><!-- 插件的依赖 --><dependencies><!-- 逆向工程的核心依赖 --><dependency><groupId>org.mybatis.generator</groupId><artifactId>mybatis-generator-core</artifactId><version>1.3.2</version></dependency><!-- 数据库连接池 --><dependency><groupId>com.mchange</groupId><artifactId>c3p0</artifactId><version>0.9.2</version></dependency><!-- MySQL驱动 --><dependency><groupId>mysql</groupId><artifactId>mysql-connector-java</artifactId><version>5.1.8</version></dependency></dependencies></plugin></plugins>
</build>

3.4 小结

通常需要用到 build 标签的时候底层都会封装好,需要自己配置的地方不多。即使有些地方需要自己配置,也不会真的需要自己去写,把现成的案例复制过来就行。

附录:完整 build 标签

<build><!--约定的目录结构--><sourceDirectory>D:\idea\maven-test\src\main\java</sourceDirectory><scriptSourceDirectory>D:\idea\maven-test\src\main\scripts</scriptSourceDirectory><testSourceDirectory>D:\idea\maven-test\src\test\java</testSourceDirectory><outputDirectory>D:\idea\maven-test\target\classes</outputDirectory><testOutputDirectory>D:\idea\maven-test\target\test-classes</testOutputDirectory><resources><resource><directory>D:\idea\maven-test\src\main\resources</directory></resource></resources><testResources><testResource><directory>D:\idea\maven-test\src\test\resources</directory></testResource></testResources><directory>D:\idea\maven-test\target</directory><finalName>maven-test-1.0-SNAPSHOT</finalName><!--备用插件管理--><pluginManagement><plugins><plugin><artifactId>maven-antrun-plugin</artifactId><version>1.3</version></plugin><plugin><artifactId>maven-assembly-plugin</artifactId><version>2.2-beta-5</version></plugin><plugin><artifactId>maven-dependency-plugin</artifactId><version>2.8</version></plugin><plugin><artifactId>maven-release-plugin</artifactId><version>2.5.3</version></plugin></plugins></pluginManagement><!--生命周期插件--><plugins><plugin><artifactId>maven-clean-plugin</artifactId><version>2.5</version><executions><execution><id>default-clean</id><phase>clean</phase><goals><goal>clean</goal></goals></execution></executions></plugin><plugin><artifactId>maven-resources-plugin</artifactId><version>2.6</version><executions><execution><id>default-testResources</id><phase>process-test-resources</phase><goals><goal>testResources</goal></goals></execution><execution><id>default-resources</id><phase>process-resources</phase><goals><goal>resources</goal></goals></execution></executions></plugin><plugin><artifactId>maven-jar-plugin</artifactId><version>2.4</version><executions><execution><id>default-jar</id><phase>package</phase><goals><goal>jar</goal></goals></execution></executions></plugin><plugin><artifactId>maven-compiler-plugin</artifactId><version>3.1</version><executions><execution><id>default-compile</id><phase>compile</phase><goals><goal>compile</goal></goals></execution><execution><id>default-testCompile</id><phase>test-compile</phase><goals><goal>testCompile</goal></goals></execution></executions></plugin><plugin><artifactId>maven-surefire-plugin</artifactId><version>2.12.4</version><executions><execution><id>default-test</id><phase>test</phase><goals><goal>test</goal></goals></execution></executions></plugin><plugin><artifactId>maven-install-plugin</artifactId><version>2.4</version><executions><execution><id>default-install</id><phase>install</phase><goals><goal>install</goal></goals></execution></executions></plugin><plugin><artifactId>maven-deploy-plugin</artifactId><version>2.7</version><executions><execution><id>default-deploy</id><phase>deploy</phase><goals><goal>deploy</goal></goals></execution></executions></plugin><plugin><artifactId>maven-site-plugin</artifactId><version>3.3</version><executions><execution><id>default-site</id><phase>site</phase><goals><goal>site</goal></goals><configuration><outputDirectory>D:\idea\maven-test\target\site</outputDirectory><reportPlugins><reportPlugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-project-info-reports-plugin</artifactId></reportPlugin></reportPlugins></configuration></execution><execution><id>default-deploy</id><phase>site-deploy</phase><goals><goal>deploy</goal></goals><configuration><outputDirectory>D:\idea\maven-test\target\site</outputDirectory><reportPlugins><reportPlugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-project-info-reports-plugin</artifactId></reportPlugin></reportPlugins></configuration></execution></executions><configuration><outputDirectory>D:\idea\maven-test\target\site</outputDirectory><reportPlugins><reportPlugin><groupId>org.apache.maven.plugins</groupId><artifactId>maven-project-info-reports-plugin</artifactId></reportPlugin></reportPlugins></configuration></plugin></plugins>
</build>

http://chatgpt.dhexx.cn/article/752OCilj.shtml

相关文章

pom文件被忽略

项目场景&#xff1a; 在idea中创建了一个项目&#xff0c;新建了一个模块 问题描述 提示&#xff1a;这里描述项目中遇到的问题&#xff1a; 发现新建的模块建错了&#xff0c;然后移除模块&#xff0c;删除相关文件后&#xff0c;又新建一个相同名字的模块时&#xff0c;出…

pom文件下载

对于收费的依赖&#xff0c;会 无法直接注入到pom.xml文件中下载&#xff0c;所以只能手动在cmd中操作命令键注入 操作命令如下&#xff1a; 依赖 <dependency><groupId>com.aspose.words</groupId><artifactId>aspose-words-jdk16</artifactId&g…

Maven的pom文件

本文参考于&#xff1a;https://blog.csdn.net/qq_47759220/article/details/119079757 一、maven项目的目录结构 pom文件定于了一个maven项目的maven配置&#xff0c;一般pom文件的放在项目或者模块的根目录下。 maven的遵循约定大于配置&#xff0c;约定了如下的目录结构&…

Maven中pom文件常见的标签使用以及介绍

一、pom文件介绍说明 1、下面是我做毕业设计时候的pom文件说明&#xff0c;可能部分说明不全&#xff0c;会在二级标题中&#xff0c;把需要特殊说明的&#xff0c;单独拎出来。 <?xml version"1.0" encoding"UTF-8"?> <!--project是pom文件的…

什么是pom文件

什么是pom文件&#xff1f; POM文件&#xff08;Project Object Model&#xff09;是Maven项目的核心文件之一&#xff0c;它定义了项目的基本信息、依赖关系、构建配置等。POM文件是一个XML文件&#xff0c;包含了项目的坐标、依赖、插件、构建配置等信息。在Maven中&#xf…

Maven中的pom.xml文件超详细解析

Maven中的pom.xml文件超详细解析 我们在平时的开发中都会或多或少的使用maven来管理和构建我们的项目&#xff0c;即使使用了各种框架jar包也是通过Maven来引入的&#xff0c;所以我觉得有必要了解pom.xml文件中的每一项配置&#xff0c;来帮助我更好的使用Maven这个自动化工具…

JAVA如何调用C/C++动态库

一、调用方式&#xff1a; JAVA调用C/C动态库有很多方法&#xff0c;常用的有JNI&#xff08;Java Native Interface&#xff09;、JNA&#xff08;Java Native Access&#xff09;。 JNI&#xff1a;早在JAVA1.1版本就开始支持&#xff0c;它定义了一种公用的语法&#xff0c…

java调用C++的过程?

jni是java和C、C通信的桥梁。 java适合写上层的应用&#xff0c;C、C适合写底层的应用。因为C、C就是跟底层打交道的。 当然这里并不讨论那么多&#xff0c;只是我要记住这一点&#xff0c;我所以做的工作就是如何使用jni&#xff0c;把留在.java中的本地的接口&#xff0c;让C…

JAVA调用C语言程序

JAVA调用C语言程序 JAVA调用C语言程序1. 编写带有native声明的方法的Java类2. 使用javah 生成&#xff1a;jniSample.h的头文件3. 使用C实现本地sum方法&#xff1a;(这里我生成文件时候&#xff0c;误写了jinSample)。4. 将本地方法编写的文件生成动态链接库。5. 再次刷新项目…

Java简单调用C语言函数

Java简单调用C语言函数 1.安装Dev-Cpp2.编写并编译Java代码3.新建工程4.修改C代码4.1将第2步生成的.h文件复制黏贴到dll.h里面4.2修改dllmain.cpp文件4.3 保存并编译4.4编译错误解决 5.将编译好的dll文件放到java安装目录下的bin目录下6.运行 1.安装Dev-Cpp 2.编写并编译Java代…

C 调用 Java 方法

文章目录 1 Java 代码2 C 代码3 总结3.1 获取参数3.2 调用方法 1 Java 代码 JNI 代码 package com.karashok;import java.util.UUID;public class JNIDemo {/*** 获取静态方法返回值*/public static native String sayHello();/*** 获取方法返回值*/public native String say…

java调用c/c++代码

JNI是Java Native Interface的英文缩写, 中文翻译为本地调用, 自从Java 1.1开始就成为了Java标准的一部分。 C/C是系统级的编程语言, 可以用来开发任何和系统相关的程序和类库, 但是Java本身编写底层的应用比较难实现, 使用JNI可以调用现有的本地库, 极大地灵活了Java的开发。…

java调用C++代码

首先我的参考博客如下&#xff1a; https://www.cnblogs.com/CLAYJJ/p/7725975.html https://www.cnblogs.com/xiaocainiao2hao/p/5619862.html https://www.cnblogs.com/langtianya/p/3470896.html 流程如下&#xff1a; 1.建立一个java文件&#xff0c;在这里我只写了一…

C语言调用Java JNI

最近项目中需要使用JNI&#xff0c;所以研究了一下&#xff0c;其中遇到过不少问题&#xff0c;总结一下&#xff0c;让遇到同样问题的人可以得到解决。 在C/C中调用Java的方法一般分为五个步骤&#xff1a;初始化虚拟机、获取类、获取类的方法、创建类对象、调用方法和退出虚…

java程序如何调用C++代码

看到java多线程中的Thread.isAlive()的类型为native&#xff0c;进一步去联想native方法什么时候用呢&#xff1f;自己能不能编写native方法&#xff1f; 经网上查资料&#xff1a; java中native修饰符的含义为“a native method is a java method whose implementation is p…

Java调用C++程序实现方法

Java调用C程序实现方法(1) 这篇博文是自己在学习过程中&#xff0c;踩了很多坑之后&#xff0c;为了避免广大热爱编程的盆友再像我这样浪费太多时间&#xff0c;索性将自己的实现方法总结出来&#xff0c;以供大家参考。程序最终实现的是Hello World效果&#xff0c;话不多说&…

从 C/C++ 程序调用 Java 代码

JNI允许您从本机代码内调用 Java 类方法。 要做到这一点&#xff0c;通常必须使用 Invocation API 在本机代码内创建和初始化一个 JVM。 下列是您可能决定从 C/C 代码调用Java 代码的典型情况&#xff1a; 1.希望实现的这部分代码是平台无关的&#xff0c;它将用于跨多种平台…

使用Java调用C/C++

文章目录 前言JNI概述例子编写Java代码编译生成的class文件:JNITest.class在命令行下使用javah生成C/C头文件。在工程的bin目录下输入以下命令&#xff1a;实现C代码。在VS2008中创建一个Win32 project&#xff0c;类型为DLL。构建C项目将dll文件复制到Java工程的bin目录下 前言…

java调用c/c++

最近项目想将比较重要的配置文件加密、综合考虑后决定用java jni实现&#xff0c;步骤如下 1.定义java本地接口 package com.msg.jni;public class JniMsg {static {try {String os System.getProperty("os.name").toLowerCase();String path "F:/opt/"…

C/C++如何调用Java

前言 简单介绍C/C如何调用Java&#xff0c;内容适合未接触过此类工程的朋友作为上手参考。 一、编译环境 1. 64位的win10系统 2. JDK&#xff1a;jdk-8u181-windows-x64.exe 3. IDE VS2017 二、调用步骤及Java虚拟机使用方法 一般步骤&#xff1a; 编写Java代码, 并编译…