`

ant入门

阅读更多
这几天忙着看项目中的部分组件,各种坑的看不懂,所以先从最建单的项目打包看看。现在对于大型复杂的项目我觉得ant还是有一席之地的,虽然现在出去很多都是用的maven。下面是找的一个小的简要介绍,觉得写的不多,简单易懂:

转自:http://www.blogjava.net/dreamstone/archive/2006/09/20/70649.html

一,构建ant环境
要使用ant首先要构建一个ant环境,步骤很简单:
1),安装jdk,设置JAVA_HOME ,PATH ,CLASS_PATH(这些应该是看这篇文章的人应该知道的)
2),下载ant 地址www.apache.org找一个你喜欢的版本,或者干脆最新的版本
3),解压ant 你得到的是一个压缩包,解压缩它,并把它放在一个尽量简单的目录,例如D:\ant-1.6虽然你不一 定要这么做,但这么做是有好处的。
4),设置ANT_HOME PATH中添加ANT_HOME目录下的bin目录
5),测试一下你的设置,开始-->运行-->cmd进入命令行-->键入 ant 回车,如果看到
Buildfile: build.xml does not exist!
Build failed
那么恭喜你你已经完成ant的设置
二,体验ant
就像每个语言都有HelloWorld一样,一个最简单的应用能让人感受一下Ant
1,首先你要知道你要干什么,我现在想做的事情是:
编写一些程序
编译它们
把它打包成jar包
把他们放在应该放置的地方
运行它们
这里为了简单起见只写一个程序,就是HelloWorld.java程序代码如下:
package test.ant;
public class HelloWorld{
public static void main(String[] args){
  System.out.println("Hello world1");
}
};

2,为了达到上边的目的,你可以手动的用javac 、copy 、jar、java来完成,但是考虑一下如果你有成百上千个类,在多次调试,部署的时候,一次次的javac 、copy、jar、java那将是一份辛苦的工作。现在看看ant怎么优雅的完成它们。

要运行ant需要有一个build.xml虽然不一定要叫这个名字,但是建议你这么做
下边就是一个完整的build.xml,然后我们来详细的解释每一句
<?xml version="1.0" encoding="UTF-8" ?>
<project name="HelloWorld" default="run" basedir=".">
<property name="src" value="src"/>
<property name="dest" value="classes"/>
<property name="hello_jar" value="hello1.jar"/>
<target name="init">
  <mkdir dir="${dest}"/>
</target>
<target name="compile" depends="init">
  <javac srcdir="${src}" destdir="${dest}"/>
</target>
<target name="build" depends="compile">
  <jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
<target name="run" depends="build">
  <java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
</target>
<target name="clean">
  <delete dir="${dest}" />
  <delete file="${hello_jar}" />
</target>
<target name="rerun" depends="clean,run">
  <ant target="clean" />
  <ant target="run" />
</target>
</project>

解释:
<?xml version="1.0" encoding="UTF-8" ?>
build.xml中的第一句话,没有实际的意义

<project name="HelloWorld" default="run" basedir=".">
</project>
ant的所有内容必须包含在这个里边,name是你给它取的名字,basedir故名思意就是工作的根目录 .代表当前目录。default代表默认要做的事情。

<property name="src" value="src"/>
类似程序中的变量,为什么这么做想一下变量的作用

<target name="compile" depends="init">
  <javac srcdir="${src}" destdir="${dest}"/>
</target>
把你想做的每一件事情写成一个target ,它有一个名字,depends是它所依赖的target,在执行这个target 例如这里的compile之前ant会先检查init是否曾经被执行过,如果执行过则直接直接执行compile,如果没有则会先执行它依赖的target例如这里的init,然后在执行这个target

如我们的计划
编译:
<target name="compile" depends="init">
<javac srcdir="${src}" destdir="${dest}"/>
</target>

做jar包:
<target name="build" depends="compile">
<jar jarfile="${hello_jar}" basedir="${dest}"/>
</target>
运行:
<target name="run" depends="build">
<java classname="test.ant.HelloWorld" classpath="${hello_jar}"/>
</target>
为了不用拷贝,我们可以在最开始定义好目标文件夹,这样ant直接把结果就放在目标文件夹中了
新建文件夹:
<target name="init">
<mkdir dir="${dest}"/>
</target>
为了更多一点的功能体现,又加入了两个target
删除生成的文件
<target name="clean">
<delete dir="${dest}" />
<delete file="${hello_jar}" />
</target>
再次运行,这里显示了如何在一个target里边调用其他的target
<target name="rerun" depends="clean,run">
<ant target="clean" />
<ant target="run" />
</target>

好了,解释完成了,下边检验一下你的ant吧
新建一个src的文件夹,然后把HelloWorld.java按照包目录放进去
做好build.xml文件
在命令行下键入ant ,你会发现一个个任务都完成了。每次更改完代码只需要再次键入ant

有的时候我们可能并不想运行程序,只想执行这些步骤中的某一两个步骤,例如我只想重新部署而不想运行,键入
ant build

ant中的每一个任务都可以这样调用ant + target name



-----------------------------------------------------------------------------
这下面看看如何定制ant任务(task):
-----------------------------------------------------------------------------

转自:http://blog.sina.com.cn/s/blog_5c0522dd0100htlq.html

基础
ANT提供了非常丰富的批处理功能,几乎能完成在JAVA项目中所有的编译,整合打包工作,但有的时候仍有一些不能实现的功能或是不足,需要去自定义一些Task,以前写过一些Task,但没有系统的学习,今天好好地看了一下ANT的文档,整理了一下,写下来。
对于每个Task而言,其本身是一个JAVA类,有以下的规定
它必须有一个不带参数的构造方法
有一个void execute()方法,是Task的动作
我们现在做一个HelloWorld,代码如下:

任务对应的实现:
package ant.task;

/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 14-5-14
 * Time: 下午10:41
 * To change this template use File | Settings | File Templates.
 */
public class helloworld {
    public void execute(){
        System.out.println("你好...");
    }

}


对应代码任务使用:
<?xml version="1.0" encoding="utf-8" ?>

<project name="anttask" default="jar" basedir=".">
    <property name="dir.src" value="src" />
    <property name="build.lib" value="lib"/>
    <property name="build.out" value="target"  />
    <property name="build.classes" value="./${build.out}/classes" />
    <property name="build.name" value="helloworld"  />

     <target name="prepare" description="环境初始化...">
         <mkdir dir="${build.out}"/>
         <mkdir dir="${build.classes}"/>
         <mkdir dir="${build.classes}/${build.name}"/>
     </target>

     <target name="init" depends="prepare" description="任务初始化...">
         <path id="build.classpath">
             <fileset dir="${build.lib}" includes="*.jar"/>
             <fileset dir="${build.out}" includes="*.jar"/>
         </path>
     </target>

     <target name="clean" depends="init" description="清除target目录下的所有文件">
         <delete failonerror="false" dir="${build.out}"/>
         <mkdir dir="${build.out}"/>
         <mkdir dir="${build.classes}"/>
         <mkdir dir="${build.classes}/${build.name}"/>
     </target>

     <taskdef name="hello" classname="ant.task.helloworld">
         <classpath>
             <fileset dir="${build.lib}" includes="*.jar"/>
         </classpath>

     </taskdef>

     <target name="compile" depends="clean" description="编译项目...">
         <echo message="compile start...." />
         <hello/>
         <javac srcdir="${dir.src}" destdir="${build.classes}/${build.name}"  debug="on" debuglevel="lines,vars,source" optimize="false" nowarn="true"
                deprecation="false" failonerror="true" memoryInitialSize="256m" memoryMaximumSize="512m" fork="true" encoding="GB2312">
              <classpath refid="build.classpath" />
         </javac>
     </target>

    <target description="打包..." name="jar" depends="compile" >
         <echo message="开始打包..."/>
         <jar file="${build.out}/${build.name}.jar" basedir="${build.classes}/${build.name}">
             <fileset dir="${build.classes}/${build.name}">
                 <include name="*.*"/>
             </fileset>
         </jar>
         <echo message="打包完成..."/>
    </target>
</project>


结果为:
引用

D:\workme\anttask>ant
Buildfile: D:\workme\anttask\build.xml

prepare:

init:

clean:
   [delete] Deleting directory D:\workme\anttask\target
    [mkdir] Created dir: D:\workme\anttask\target
    [mkdir] Created dir: D:\workme\anttask\target\classes
    [mkdir] Created dir: D:\workme\anttask\target\classes\helloworld

compile:
     [echo] compile start....
    [hello] 你好...
    [javac] D:\workme\anttask\build.xml:41: warning: 'includeantruntime' was not
set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 1 source file to D:\workme\anttask\target\classes\hellowor
ld

jar:
     [echo] 开始打包...
      [jar] Building jar: D:\workme\anttask\target\helloworld.jar
     [echo] 打包完成...

BUILD SUCCESSFUL
Total time: 1 second


为了更好的被ANT支持,以及使用Project,Property等信息,Task最好从org.apache.tools.ant.Task继承,改写如下:

package ant.task;

import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;

/**
 * Created with IntelliJ IDEA.
 * User: Administrator
 * Date: 14-5-14
 * Time: 下午10:41
 * To change this template use File | Settings | File Templates.
 */
public class helloworld extends Task {
    public String getMessage() {
        return message;
    }

    public void setMessage(String message) {
        this.message = message;
    }

    private String message;
    public void execute() throws BuildException{
        System.out.println("你好..."+getMessage());
    }
}

<?xml version="1.0" encoding="utf-8" ?>

<project name="anttask" default="jar" basedir=".">
    <property name="dir.src" value="src" />
    <property name="build.lib" value="lib"/>
    <property name="build.out" value="target"  />
    <property name="build.classes" value="./${build.out}/classes" />
    <property name="build.name" value="helloworld"  />

     <target name="prepare" description="环境初始化...">
         <mkdir dir="${build.out}"/>
         <mkdir dir="${build.classes}"/>
         <mkdir dir="${build.classes}/${build.name}"/>
     </target>

     <target name="init" depends="prepare" description="任务初始化...">
         <path id="build.classpath">
             <fileset dir="${build.lib}" includes="*.jar"/>
             <fileset dir="${build.out}" includes="*.jar"/>
         </path>
     </target>

     <target name="clean" depends="init" description="清除target目录下的所有文件">
         <delete failonerror="false" dir="${build.out}"/>
         <mkdir dir="${build.out}"/>
         <mkdir dir="${build.classes}"/>
         <mkdir dir="${build.classes}/${build.name}"/>
     </target>



     <target name="compile" depends="clean" description="编译项目...">
         <echo message="compile start...." />
         <javac srcdir="${dir.src}" destdir="${build.classes}/${build.name}"  debug="on" debuglevel="lines,vars,source" optimize="false" nowarn="true"
                deprecation="false" failonerror="true" memoryInitialSize="256m" memoryMaximumSize="512m" fork="true" encoding="GB2312">
              <classpath refid="build.classpath" />
         </javac>
     </target>

    <target description="打包..." name="jar" depends="compile" >
         <echo message="开始打包..."/>
         <jar file="${build.out}/${build.name}.jar" basedir="${build.classes}/${build.name}">
             <fileset dir="${build.classes}/${build.name}">
                 <include name="*.*"/>
             </fileset>
         </jar>
         <echo message="打包完成..."/>
    </target>
</project>


结果为:
引用

D:\workme\anttask>ant
Buildfile: D:\workme\anttask\build.xml

prepare:

init:

clean:
   [delete] Deleting directory D:\workme\anttask\target
    [mkdir] Created dir: D:\workme\anttask\target
    [mkdir] Created dir: D:\workme\anttask\target\classes
    [mkdir] Created dir: D:\workme\anttask\target\classes\helloworld

compile:
     [echo] compile start....
    [hello] 你好...Hello, xiej!
    [hello] 你好...null
    [javac] D:\workme\anttask\build.xml:41: warning: 'includeantruntime' was not
set, defaulting to build.sysclasspath=last; set to false for repeatable builds
    [javac] Compiling 1 source file to D:\workme\anttask\target\classes\hellowor
ld

jar:
     [echo] 开始打包...
      [jar] Building jar: D:\workme\anttask\target\helloworld.jar
     [echo] 打包完成...

BUILD SUCCESSFUL
Total time: 1 second


在配置中可以使用的类型不光是String,还可以是:

类型 接受值
boolean true,yes,no,false
char或java.lang.Charset 首字符
值类型(int,short等) 数值
java.io.File 文件路径名,当是一个相对路径时,按Project的baseDir计算文件名,取得其对应文件
org.apache.tools.ant.types.path 路径名,当是一个相对路径时,按Project的baseDir计算路径
java.lang.Class 类名,一个在classPath中能找到的类
有String做为参数的构造方法的类 构造方法参数
org.apache.tools.ant.types.EnumAttributes的子类
枚举名

调用
当我们的Task中用到了其他的Task时,方法如下:
构造相应的Task
调用其setProject方法
设置其配置值
执行perform()方法


Task容器
当一个Task的参数是一个Task的系列,就像Target一样时,需要使用Task容器。实现方法如下:
将Task实现org.apache.tools.ant.TaskContainer接口
实现接口中的void addTask(Task task)方法即可
例如,我们创建反复执行指定Task系列的循环Task,代码如下:
import java.util.List;

import java.util.ArrayList;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.TaskContainer;
public class Repeat extends Task implements TaskContainer {
private List taskList;
private int repeat;
public void setRepeat(int repeat) {
this.repeat = repeat;
}
public void init() throws BuildException {
taskList = new ArrayList();
}
public void addTask(Task task) {
taskList.add(task);
}
public void execute() throws BuildException {
for (int i = 0; i < repeat; i++) {
for (int j = 0; j < taskList.size(); j++) {
Task task = (Task) taskList.get(j);
task.perform();
}
}
}
}
编写build.xml,如下:
"test" depends="jar">

"./test.jar" name="Repeat" classname="Repeat"/>
"3">
"First"/>
"Second"/>
执行结果如下:
test:

[echo] First
[echo] Second
[echo] First
[echo] Second
[echo] First
[echo] Second
Property
Property除了在build.xml中可以定义之外,也可以在Task中读取和写入,Task需要实现setProject(Project project)和getProject()方法(如果从org.apache.tools.ant.Task继承,则已经实现)
Task可以通过getProject().getProperty(String)获取Property值,也可以通过getProject().setProperty(String key,String value)来设定Property值,如下面的Task向Property追加字符:
import org.apache.tools.ant.Task;

import org.apache.tools.ant.BuildException;
public class AppendProperty extends Task {
private String key;
private String append;
public void setKey(String key) {
this.key = key;
}
public void setAppend(String append) {
this.append = append;
}
public void execute() throws BuildException {
String orginal = getProject().getProperty(key);
String result;
if (orginal == null)
result = append;
else
result = orginal + append;
getProject().setProperty(key, result);
}
}
编写build.xml如下:
"test" depends="jar">

"./test.jar" name="AppendProperty" classname="AppendProperty"/>
"message" append="Property "/>
"${message}"/>
"message" append="Test"/>
"${message}"/>
执行结果如下:
test:

[echo] Property
[echo] Property Test
FileSet
FileSet是Ant中很常见的一种类型,它的使用方法参照以下程序:
import java.util.ArrayList;

import java.util.List;
import org.apache.tools.ant.BuildException;
import org.apache.tools.ant.DirectoryScanner;
import org.apache.tools.ant.Task;
import org.apache.tools.ant.types.FileSet;
public class FileSetFind extends Task {
private List fileSetList;
public void init() throws BuildException {
fileSetList = new ArrayList();
}
public void addFileSet(FileSet fileSet) {
fileSetList.add(fileSet);
}
public void execute() throws BuildException {
for (int i = 0; i < fileSetList.size(); i++) {
FileSet fileSet = (FileSet) fileSetList.get(i);
DirectoryScanner ds = fileSet.getDirectoryScanner(getProject());
String[] includedFiles = ds.getIncludedFiles();
for (int j = 0; j < includedFiles.length; j++) {
String includedFile = includedFiles[j];
System.out.println(includedFile);
}
}
}
}
编写build.xml,如下:
"test" depends="jar">

"./test.jar" name="find" classname="FileSetFind"/>
"..">
"**/b/**"/>
执行结果如下:
test:

[find] AntTask\test\b\1.txt
[find] AntTask\test\b\2.txt
[find] AntTask\test\b\3.txt
其他的如Path,FileList使用方法相似,可参考相关的文档
异常
在前文的程序中一直出现一个org.apache.tools.ant.BuildException的类,一直没有说明,在这里说明一下,这是Ant专用的一个异常,Task执行中的异常应使用这个类,以便Ant或Ant工具进行处理
这里有一个例子:
import org.apache.tools.ant.Task;

import org.apache.tools.ant.BuildException;
public class Error extends Task {
public void execute() throws BuildException {
throw new BuildException("My Build Exception");
}
}
编写build.xml:
"test" depends="jar">

"./test.jar" name="error" classname="Error"/>
执行结果:
test:

BUILD FAILED
E:\workhome\AntTask\build.xml:23: My Build Exception
分享到:
评论

相关推荐

    智能车竞赛介绍(竞赛目标和赛程安排).zip

    全国大学生智能汽车竞赛自2006年起,由教育部高等教育司委托高等学校自动化类教学指导委员会举办,旨在加强学生实践、创新能力和培养团队精神的一项创意性科技竞赛。该竞赛至今已成功举办多届,吸引了众多高校学生的积极参与,此文件为智能车竞赛介绍

    集字卡v4.3.4微信公众号原版三种UI+关键字卡控制+支持强制关注.zip

    字卡v4.3.4 原版 三种UI+关键字卡控制+支持获取用户信息+支持强制关注 集卡模块从一开始的版本到助力版本再到现在的新规则版本。 集卡模块难度主要在于 如何控制各种不同的字卡组合 被粉丝集齐的数量。 如果不控制那么一定会出现超过数量的粉丝集到指定的字卡组合,造成奖品不够的混乱,如果大奖价值高的话,超过数量的粉丝集到大奖后,就造成商家的活动费用超支了。我们冥思苦想如何才能限制集到指定字卡组合的粉丝数,后我们想到了和支付宝一样的选一张关键字卡来进行规则设置的方式来进行限制,根据奖品所需的关键字卡数,设定规则就可以控制每种奖品所需字卡组合被粉丝集到的数量,规则可以在活动进行中根据需要进行修改,活动规则灵活度高。新版的集卡规则,在此次政府发布号的活动中经受了考验,集到指定字卡组合的粉丝没有超出规则限制。有了这个规则限制后,您无需盯着活动,建好活动后就无人值守让活动进行就行了,您只需要时不时来看下蹭蹭上涨的活动数据即可。 被封? 无需担心,模块内置有防封功能,支持隐藏主域名,显示炮灰域名,保护活动安全进行。 活动准备? 只需要您有一个认证服务号即可,支持订阅号借用认证服务号来做活动。如果您

    出口设备线体程序详解:PLC通讯下的V90控制与开源FB284工艺对象实战指南,出口设备线体程序详解:PLC通讯与V90控制集成,工艺对象与FB284协同工作,开源学习V90控制技能,出口设备1200

    出口设备线体程序详解:PLC通讯下的V90控制与开源FB284工艺对象实战指南,出口设备线体程序详解:PLC通讯与V90控制集成,工艺对象与FB284协同工作,开源学习V90控制技能,出口设备1200线体程序,多个plc走通讯,内部有多个v90,采用工艺对象与fb284 共同控制,功能快全部开源,能快速学会v90的控制 ,出口设备; 1200线体程序; PLC通讯; 多个V90; 工艺对象; FB284; 功能开源; V90控制。,V90工艺控制:开源功能快,快速掌握1200线体程序与PLC通讯

    基于Arduino与DAC8031的心电信号模拟器资料:心电信号与正弦波的双重输出应用方案,Arduino与DAC8031心电信号模拟器:生成心电信号与正弦波输出功能详解,基于arduino +DAC

    基于Arduino与DAC8031的心电信号模拟器资料:心电信号与正弦波的双重输出应用方案,Arduino与DAC8031心电信号模拟器:生成心电信号与正弦波输出功能详解,基于arduino +DAC8031的心电信号模拟器资料,可输出心电信号,和正弦波 ,基于Arduino;DAC8031;心电信号模拟器;输出心电信号;正弦波输出;模拟器资料,基于Arduino与DAC8031的心电信号模拟器:输出心电与正弦波

    (参考项目)MATLAB口罩识别检测.zip

    MATLAB口罩检测的基本流程 图像采集:通过摄像头或其他图像采集设备获取包含面部的图像。 图像预处理:对采集到的图像进行灰度化、去噪、直方图均衡化等预处理操作,以提高图像质量,便于后续的人脸检测和口罩检测。 人脸检测:利用Haar特征、LBP特征等经典方法或深度学习模型(如MTCNN、FaceBoxes等)在预处理后的图像中定位人脸区域。 口罩检测:在检测到的人脸区域内,进一步分析是否佩戴口罩。这可以通过检测口罩的边缘、纹理等特征,或使用已经训练好的口罩检测模型来实现。 结果输出:将检测结果以可视化方式展示,如在图像上标注人脸和口罩区域,或输出文字提示是否佩戴口罩。

    kernel-debug-devel-3.10.0-1160.119.1.el7.x64-86.rpm.tar.gz

    1、文件内容:kernel-debug-devel-3.10.0-1160.119.1.el7.rpm以及相关依赖 2、文件形式:tar.gz压缩包 3、安装指令: #Step1、解压 tar -zxvf /mnt/data/output/kernel-debug-devel-3.10.0-1160.119.1.el7.tar.gz #Step2、进入解压后的目录,执行安装 sudo rpm -ivh *.rpm 4、更多资源/技术支持:公众号禅静编程坊

    day02供应链管理系统-补充.zip

    该文档提供了一个关于供应链管理系统开发的详细指南,重点介绍了项目安排、技术实现和框架搭建的相关内容。 文档分为以下几个关键部分: 项目安排:主要步骤包括搭建框架(1天),基础数据模块和权限管理(4天),以及应收应付和销售管理(5天)。 供应链概念:供应链系统的核心流程是通过采购商品放入仓库,并在销售时从仓库提取商品,涉及三个主要订单:采购订单、销售订单和调拨订单。 大数据的应用:介绍了数据挖掘、ETL(数据抽取)和BI(商业智能)在供应链管理中的应用。 技术实现:讲述了DAO(数据访问对象)的重用、服务层的重用、以及前端JS的继承机制、jQuery插件开发等技术细节。 系统框架搭建:包括Maven环境的配置、Web工程的创建、持久化类和映射文件的编写,以及Spring配置文件的实现。 DAO的需求和功能:供应链管理系统的各个模块都涉及分页查询、条件查询、删除、增加、修改操作等需求。 泛型的应用:通过示例说明了在Java语言中如何使用泛型来实现模块化和可扩展性。 文档非常技术导向,适合开发人员参考,用于构建供应链管理系统的架构和功能模块。

    基于四旋翼无人机的PD控制研究 附Matlab代码.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    C#与VB实现欧姆龙PLC的Fins TCP通信案例源码:调用动态链接库进行数据读写,定时器与计数器数据区的简洁读写操作示例,C#与VB实现欧姆龙PLC的Fins TCP通信案例源码:调用动态链接库进

    C#与VB实现欧姆龙PLC的Fins TCP通信案例源码:调用动态链接库进行数据读写,定时器与计数器数据区的简洁读写操作示例,C#与VB实现欧姆龙PLC的Fins TCP通信案例源码:调用动态链接库进行读写操作,涵盖定时器计数器数据区学习案例,C#欧姆龙plc Fins Tcp通信案例上位机源码,有c#和VB的Demo,c#上位机和欧姆龙plc通讯案例源码,调用动态链接库,可以实现上位机的数据连接,可以简单实现D区W区定时器计数器等数据区的读写,是一个非常好的学习案例 ,C#; 欧姆龙PLC; Fins Tcp通信; 上位机源码; 动态链接库; 数据连接; D区W区读写; 定时器计数器; 学习案例,C#实现欧姆龙PLC Fins Tcp通信上位机源码,读写数据区高效学习案例

    可调谐石墨烯超材料吸收体的FDTD仿真模拟研究报告:吸收光谱的化学势调节策略与仿真源文件解析,可调谐石墨烯超材料吸收体:化学势调节光谱的FDTD仿真模拟研究,可调谐石墨烯超材料吸收体FDTD仿真模拟

    可调谐石墨烯超材料吸收体的FDTD仿真模拟研究报告:吸收光谱的化学势调节策略与仿真源文件解析,可调谐石墨烯超材料吸收体:化学势调节光谱的FDTD仿真模拟研究,可调谐石墨烯超材料吸收体FDTD仿真模拟 【案例内容】该案例提供了一种可调谐石墨烯超材料吸收体,其吸收光谱可以通过改变施加于石墨烯的化学势来进行调节。 【案例文件】仿真源文件 ,可调谐石墨烯超材料吸收体; FDTD仿真模拟; 化学势调节; 仿真源文件,石墨烯超材料吸收体:FDTD仿真调节吸收光谱案例解析

    RBF神经网络控制仿真-第二版

    RBF神经网络控制仿真-第二版

    松下PLC与威纶通触摸屏转盘设备控制:FPWINPRO7与EBPRO智能编程与宏指令应用,松下PLC与威纶通触摸屏转盘设备控制解决方案:FPWINPRO7与EBPRO协同工作,实现多工位转盘加工与IE

    松下PLC与威纶通触摸屏转盘设备控制:FPWINPRO7与EBPRO智能编程与宏指令应用,松下PLC与威纶通触摸屏转盘设备控制解决方案:FPWINPRO7与EBPRO协同工作,实现多工位转盘加工与IEC编程模式控制,松下PLC+威纶通触摸屏的转盘设备 松下PLC工程使用程序版本为FPWINPRO7 7.6.0.0版本 威纶通HMI工程使用程序版本为EBPRO 6.07.02.410S 1.多工位转盘加工控制。 2.国际标准IEC编程模式。 3.触摸屏宏指令应用控制。 ,松下PLC; 威纶通触摸屏; 转盘设备控制; 多工位加工控制; IEC编程模式; 触摸屏宏指令应用,松下PLC与威纶通HMI联控的转盘设备控制程序解析

    基于循环神经网络(RNN)的多输入单输出预测模型(适用于时间序列预测与回归分析,需Matlab 2021及以上版本),基于循环神经网络(RNN)的多输入单输出预测模型(matlab版本2021+),真

    基于循环神经网络(RNN)的多输入单输出预测模型(适用于时间序列预测与回归分析,需Matlab 2021及以上版本),基于循环神经网络(RNN)的多输入单输出预测模型(matlab版本2021+),真实值与预测值对比,多种评价指标与线性拟合展示。,RNN预测模型做多输入单输出预测模型,直接替数据就可以用。 程序语言是matlab,需求最低版本为2021及以上。 程序可以出真实值和预测值对比图,线性拟合图,可打印多种评价指标。 PS:以下效果图为测试数据的效果图,主要目的是为了显示程序运行可以出的结果图,具体预测效果以个人的具体数据为准。 2.由于每个人的数据都是独一无二的,因此无法做到可以任何人的数据直接替就可以得到自己满意的效果。 这段程序主要是一个基于循环神经网络(RNN)的预测模型。它的应用领域可以是时间序列预测、回归分析等。下面我将对程序的运行过程进行详细解释和分析。 首先,程序开始时清空环境变量、关闭图窗、清空变量和命令行。然后,通过xlsread函数导入数据,其中'数据的输入'和'数据的输出'是两个Excel文件的文件名。 接下来,程序对数据进行归一化处理。首先使用ma

    【图像识别】手写文字识别研究 附Matlab代码+运行结果.rar

    1.版本:matlab2014/2019a/2024a 2.附赠案例数据可直接运行matlab程序。 3.代码特点:参数化编程、参数可方便更改、代码编程思路清晰、注释明细。 4.适用对象:计算机,电子信息工程、数学等专业的大学生课程设计、期末大作业和毕业设计。

    旅游管理系统(基于springboot,mysql,java).zip

    旅游管理系统中的功能模块主要是实现管理员;首页、个人中心、用户管理、旅游方案管理、旅游购买管理、系统管理,用户;首页、个人中心、旅游方案管理、旅游购买管理、我的收藏管理。前台首页;首页、旅游方案、旅游资讯、个人中心、后台管理等功能。经过认真细致的研究,精心准备和规划,最后测试成功,系统可以正常使用。分析功能调整与旅游管理系统实现的实际需求相结合,讨论了Java开发旅游管理系统的使用。 从上面的描述中可以基本可以实现软件的功能: 1、开发实现旅游管理系统的整个系统程序;  2、管理员;首页、个人中心、用户管理、旅游方案管理、旅游购买管理、系统管理等。 3、用户:首页、个人中心、旅游方案管理、旅游购买管理、我的收藏管理。 4、前台首页:首页、旅游方案、旅游资讯、个人中心、后台管理等相应操作; 5、基础数据管理:实现系统基本信息的添加、修改及删除等操作,并且根据需求进行交流查看及回复相应操作。

    Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基

    Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构的Simulink建模与MPPT最大功率点追踪:基于功率反馈的扰动观察法调整电压方向研究,Boost二级升压光伏并网结构,Simulink建模,MPPT最大功率点追踪,扰动观察法采用功率反馈方式,若ΔP>0,说明电压调整的方向正确,可以继续按原方向进行“干扰”;若ΔP<0,说明电压调整的方向错误,需要对“干扰”的方向进行改变。 ,Boost升压;光伏并网结构;Simulink建模;MPPT最大功率点追踪;扰动观察法;功率反馈;电压调整方向。,光伏并网结构中Boost升压MPPT控制策略的Simulink建模与功率反馈扰动观察法

    基于matlab平台的图像去雾设计.zip

    运行GUI版本,可二开

    Deepseek相关参考资源文档

    Deepseek相关主题资源及行业影响

    WP Smush Pro3.16.12 一款专为 WordPress 网站设计的图像优化插件开心版.zip

    WP Smush Pro 是一款专为 WordPress 网站设计的图像优化插件。 一、主要作用 图像压缩 它能够在不影响图像质量的前提下,大幅度减小图像文件的大小。例如,对于一些高分辨率的产品图片或者风景照片,它可以通过先进的压缩算法,去除图像中多余的数据。通常 JPEG 格式的图像经过压缩后,文件大小可以减少 40% – 70% 左右。这对于网站性能优化非常关键,因为较小的图像文件可以加快网站的加载速度。 该插件支持多种图像格式的压缩,包括 JPEG、PNG 和 GIF。对于 PNG 图像,它可以在保留透明度等关键特性的同时,有效地减小文件尺寸。对于 GIF 图像,也能在一定程度上优化文件大小,减少动画 GIF 的加载时间。 懒加载 WP Smush Pro 实现了图像懒加载功能。懒加载是一种延迟加载图像的技术,当用户滚动页面到包含图像的位置时,图像才会加载。这样可以避免一次性加载大量图像,尤其是在页面内容较多且包含许多图像的情况下。例如,在一个新闻网站的长文章页面,带有大量配图,懒加载可以让用户在浏览文章开头部分时,不需要等待所有图片加载,从而提高页面的初始加载速度,同时也能

    1. Download this file: https://cdn-media.huggingface.co/frpc-gradio-0.3/frpc-windows-amd64.exe

    Could not create share link. Missing file: C:\Users\xx\.conda\envs\omni\Lib\site-packages\gradio\frpc_windows_amd64_v0.3 1. Download this file: https://cdn-media.huggingface.co/frpc-gradio-0.3/frpc_windows_amd64.exe 2. Rename the downloaded file to: frpc_windows_amd64_v0.3 3. Move the file to this location: C:\Users\xx\.conda\envs\omni\Lib\site-packages\gradio

Global site tag (gtag.js) - Google Analytics