Docs

Docs

  • 文档
  • github

›开始开发

概述

  • HVM简介
  • HVMD安装
  • 快速开始

HVM 智能合约

  • 合约简介
  • 合约规范
  • 内置类型
  • 注意事项

开始开发

  • 合约模板
  • 应用模板
  • 合约编译
  • SDK使用
  • FAQ

合约编译

编译说明

合约写好后需要编译为一个jar包来进行部署,也就是说,一个编译好的合约就是一个特结构的jar包。 在这个jar包中需要包含MANIFEST.MF文件:

jar-package
|-META-INF
| |-MANIFEST.MF  //必须要包含此文件
|...

而且MANIFEST.MF文件中必须包含Main-Class字段指定合约主体类的全限定名

Main-Class: cn.hyperchain.institute.SBank

编译方式

对于使用合约模板的合约工程,或者是使用工程模板的项目工程,均可以使用如下命令进行合约的编译

mvn compile

pom.xml

针对包含应用和合约的项目,我们需要对合约部分单独打包,可以利用下面的配置:

<plugin>
    <groupId>org.apache.maven.plugins</groupId>
    <artifactId>maven-jar-plugin</artifactId>
    <version>3.1.0</version>
    <executions>
        <execution>
            <!--<phase>compile</phase>-->
            <phase>process-sources</phase>
            <goals>
                <goal>jar</goal>
            </goals>
            <configuration>
                <classifier>student</classifier>
                <includes>
                    <include>**/contract/student/logic/*/**</include>
                </includes>
                <archive>
                    <index>true</index>
                    <manifest>
                        <!--UserShould modify here-->
                        <mainClass>com.demo.app.contract.student.logic.StudentContract</mainClass>
                    </manifest>
                </archive>
            </configuration>
        </execution>
    </executions>

</plugin>


  <plugin>
    <artifactId>maven-resources-plugin</artifactId>
    <version>2.5</version>
    <executions>
        <execution>
            <id>copy-contract</id>
            <phase>compile</phase>
            <goals>
                <goal>copy-resources</goal>
            </goals>
            <configuration>
                <outputDirectory>${basedir}/target/classes/contract</outputDirectory>
                <resources>
                    <resource>
                        <directory>${basedir}/target/</directory>
                        <includes>
                            <include>*-student.jar</include>
                        </includes>
                    </resource>
                </resources>
            </configuration>
        </execution>
    </executions>
</plugin>

需要注意的是,mainClass 部分配置需要针对合约主类全限定名进行配置,通过指定特定包下面的代码进行打包,可以单独打包合约Jar包代码。

说明:Gradle工程或者其他构建方式请自行配置

← 应用模板SDK使用 →
  • 编译说明
  • 编译方式
  • pom.xml
QTechGitHub
Copyright © 2025 Hyperchain Co., Ltd.