合约编译
编译说明
合约写好后需要编译为一个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工程或者其他构建方式请自行配置