Versions Compared

Key

  • This line was added.
  • This line was removed.
  • Formatting was changed.

...

通过前面几节的学习,我们已经可以开发出来一个可用的插件了,但是还无法把开发的插件包分发给其他人用(给其他人安装或者上传到插件商城),这一节就是展示如何构建一个可分发的插件包。

构建加密插件包

1、进入插件源码目录,注意查看jdk进入插件源码目录,注意查看ext.home属性,如果没有指向正确的JDK目录,需要修改;guard的值,默认为false,需要构建加密插件包,要将这个值改为true;

2、查看reportLibs属性,是否指向了正确的目录。

执行命令

Code Block
languagetext
ant -f build.xml jargradle zip

执行完毕后,可以在插件源码目录/build/install目录下看到构建好的插件安装包(一个zip文件),使用这种配置构建出来的插件代码,无法反编译。

关键构建配置

Code Block
languagexml
linenumberstrue
    <target name="compile_javas">ext {
        <echo message="编译${compile_files}下的Java文件"/>/**
     * 项目中依赖的jar的路径
  <javac destdir="${classes}" debug="false" optimize="on" source="${source_jdk_version}" * 1.如果依赖的jar需要打包到zip中,放置在lib根目录下
     * 2.如果依赖的jar仅仅是编译时需要,防止在lib下子目录下即可
         target="${target_jdk_version}"*/
               fork="true" memoryMaximumSize="512m" listfiles="false" srcdir="${basedir}"libPath = "$projectDir/../webroot/WEB-INF/lib"

    /**
     * 是否对插件的class进行加密保护,防止反编译
     executable="${compile_jdk_version}/bin/javac">*/
    guard = true

    def pluginInfo <src path="${basedir}/src/main/java"/>= getPluginInfo()
            <exclude name="**/.svn/**"/>pluginPre = "fine-plugin"
    pluginName = pluginInfo.id
      <compilerargpluginVersion line="-encoding UTF8 "/> pluginInfo.version

    outputPath        <classpath refid="compile.classpath"/>
        </javac>
        <taskdef name="pretreatment" classname="com= "$projectDir/../webroot/WEB-INF/plugins/plugin-" + pluginName + "-1.0/classes"
}

 注意:在进行插件调试时,不可开启加密保护模式

构建不加密插件包

进入插件源码目录,注意查看ext.guard的值,默认为false即可;

执行命令

Code Block
languagetext
gradle zip

执行完毕后,可以在插件源码目录/build/install目录下看到构建好的插件安装包(一个zip文件),使用这种配置构建出来的插件代码,可以被反编译。

关键构建配置(去掉了com.fr.plugin.pack.

...

 

...

PluginPretreatmentTask任务)

Code Block
languagexml
linenumberstrue
ext {
/**
* 项目中依赖的jar的路径
* 1.如果依赖的jar需要打包到zip中,放置在lib根目录下
* 2.如果依赖的jar仅仅是编译时需要,防止在lib下子目录下即可
*/
libPath = "$projectDir/../webroot/WEB-INF/lib"

/**
* 是否对插件的class进行加密保护,防止反编译
*/
guard = false

def pluginInfo = getPluginInfo()
pluginPre = "fine-plugin"
pluginName = pluginInfo.id
pluginVersion = pluginInfo.version

outputPath = "$projectDir/../webroot/WEB-INF/plugins/plugin-" + pluginName + "-1.0/classes"
}