英语法语西班牙语

Ad


OnWorks 网站图标

ajc - 云端在线

通过 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器在 OnWorks 免费托管服务提供商中运行 ajc

这是命令 ajc,可以使用我们的多个免费在线工作站之一在 OnWorks 免费托管服务提供商中运行,例如 Ubuntu Online、Fedora Online、Windows 在线模拟器或 MAC OS 在线模拟器

程序:

您的姓名


ajc — AspectJ 和 Java 语言的编译器和字节码编织器

概要


阿杰克 [附加选项[文件... | @文件... | -arg文件 文件... ]

产品描述


阿杰克 命令编译和编织 AspectJ 和 Java 源代码和 .class 文件,生成
与任何 Java VM(1.1 或更高版本)兼容的 .class 文件。 它结合了编译和
字节码编织并支持增量构建; 您还可以在运行时编织字节码
运用 "" >.

选项后面的参数指定要编译的源文件。 指定来源
类,使用 -输入路径 (以下)。 文件可以直接列在命令行或
文件。 的 -arg文件 文件@文件 形式是等价的,并被解释为意义
指定文件中列出的所有参数。

请注意: 您必须明确通过 阿杰克 所有必要的来源。 确保包括来源
不仅针对方面或切入点,还针对任何受影响的类型。 指定所有
源是必要的,因为与 javac 不同,ajc 不搜索源路径
类。 (有关可能需要哪些受影响类型的讨论,请参阅 方面J
代码编程 指南, SAP系统集成计划实施 附录 ../progguide/implementation.html) .

要指定源,您可以将源文件列为参数或使用选项 -源根
or -输入路径. 如果任何类型有多个来源,则结果未定义,因为 ajc
无法确定哪个来源是正确的。 (这种情况最常发生在用户
在 inpath 中包含目标目录并重建。)

附加选项
-injars 清单
不推荐使用:从 1.2 开始,使用 -inpath,它也接受目录。

-输入路径 途径
接受任何 .class 文件作为源字节码输出将包括这些
类,可能与任何适用的方面交织在一起。 路径是单一的
包含 zip 文件或目录的路径列表的参数,由
特定于平台的路径分隔符。

-方面路径 途径
将路径上的 jar 文件和目录中的二进制方面编织到所有源中。
这些方面应该由相同版本的编译器输出。 什么时候
运行输出类,运行类路径应包含所有方面路径
条目。 与类路径一样,路径是包含路径列表的单个参数
到 jar 文件,由平台特定的类路径分隔符分隔。

-arg文件 文件
该文件包含一个以行分隔的参数列表。 文件中的每一行
应该包含一个选项、文件名或参数字符串(例如,类路径或
路径)。 从文件中读取的参数被插入到参数列表中
命令。 文件中的相对路径是从目录计算出来的
包含文件(不是当前工作目录)。 注释,就像在 Java 中一样,
从...开始 // 并延伸到行尾。 参数中指定的选项
文件可能会覆盖而不是扩展现有的选项值,因此避免
指定选项,如 -类路径 在参数文件中
参数文件是唯一的构建规范。 表格 @文件 是相同的
指定 -arg文件 文件.

-外罐 输出文件
将输出类放在 zip 文件 output.jar 中。

-outxml 使用默认名称生成用于加载时编织的 aop.xml 文件。

-outxml文件 自定义/aop.xml
使用自定义名称生成 aop.xml 文件用于加载时编织。

-增加的
连续运行编译器。 初始编译后,编译器将
等待重新编译,直到它从标准输入读取换行符,然后
当它读到'q'时退出。 它只会重新编译必要的组件,因此
重新编译应该比进行第二次编译快得多。 这需要
-源根。

-源根 目录路径
在 中列出的任何目录下查找并构建所有 .java 或 .aj 源文件
目录路径。 DirPaths 和 classpath 一样,是一个包含一个列表的参数
目录路径,由特定于平台的类路径分隔符分隔。
由 -incremental 要求。

-交叉引用
在输出目录中生成一个 build .ajsym 文件。 用于查看
通过像 AspectJ 浏览器这样的工具横切引用。

-emacssym 为 emacs 支持生成 .ajesym 符号文件(已弃用)。

-Xlint 与 -Xlint:warning 相同(默认启用)

-Xlint:{级别}
为有关潜在编程错误的消息设置默认级别
横切代码。 {level} 可能是忽略、警告或错误。 这覆盖
org/aspectj/weaver/XlintDefault.properties 中的条目来自 aspectjtools.jar,但是
不覆盖使用 -Xlintfile 选项设置的级别。

-Xlint 文件 属性文件
指定属性文件以设置特定横切消息的级别。
PropertyFile 是具有相同属性的 Java .properties 文件的路径
名称和值作为 org/aspectj/weaver/XlintDefault.properties 来自
aspectjtools.jar,它也覆盖。

-help 发出有关编译器选项和用法的信息

-version 发出 AspectJ 编译器的版本

-类路径 途径
指定在何处查找用户类文件。 路径是包含一个的单个参数
zip 文件或目录的路径列表,由特定于平台的分隔
路径分隔符。

-引导类路径 途径
覆盖 VM 引导类路径的位置,以便在以下情况下评估类型
编译。 Path 是一个包含 zip 文件路径列表的参数或
目录,由特定于平台的路径分隔符分隔。

-extdirs 途径
为评估类型而覆盖 VM 扩展目录的位置
编译时。 Path 是一个包含路径列表的单个参数
目录,由特定于平台的路径分隔符分隔。

-d 目录
指定放置生成的 .class 文件的位置。 如果没有指定, 目录
默认为当前工作目录。

-目标 [1.1 1.5]
指定类文件目标设置(1.1 到 1.5,默认为 1.2)

-1.3 将合规性级别设置为 1.3 这意味着 -source 1.3 和 -target 1.1。

-1.4 将合规性级别设置为 1.4(默认)这意味着 -source 1.4 和 -target 1.2。

-1.5 将合规性级别设置为 1.5。 这意味着 -source 1.5 和 -target 1.5。

-资源 [1.3|1.4|1.5]
切换断言(1.3、1.4 或 1.5 - 默认为 1.4)。 使用 -source 1.3 时,
在 Java 1.4 下有效的 assert() 语句将导致编译器错误。
使用 -source 1.4 时,请处理 断言 作为关键字并实现断言
根据 1.4 语言规范。 使用 -source 1.5 时,Java 5 语言
特征是允许的。

-nowarn 不发出警告(相当于“-warn:none”)这不会抑制消息
由...生成 宣布 警告 or 林特.

-警告: 项目
对以逗号分隔的可疑代码列表的任何实例发出警告
(例如'-warn:unusedLocals,deprecation'):

带有构造函数名称的constructorName 方法
packageDefaultMethod 尝试覆盖 package-default 方法
弃用类型或成员的弃用用法
maskedCatchBlocks 隐藏的捕获块
未使用的Locals 局部变量从不读取
未使用的参数方法参数永远不会被读取
文件中的代码未使用未使用的导入语句
none 禁止所有编译器警告

-警告:无 不抑制由生成的消息 宣布 警告 or 林特.

- 弃用
与 -warn:deprecation 相同

-无导入错误
对于未解析的导入不发出错误

- 出错时继续
出错后继续编译,用有问题的方法转储类文件

-g:[行、变量、源]
调试属性级别,可能采用三种形式:

-g 所有调试信息 ('-g:lines,vars,source')
-g:none 没有调试信息
-g:{items} 任何/所有 [lines, vars, source] 的调试信息,例如,
-g:行,来源

-preserveAllLocals
在代码生成期间保留所有局部变量(以方便调试)。

-参考信息
计算参考信息。

-编码 格式
指定默认源编码格式。 在每个文件上指定自定义编码
通过在每个输入源文件/文件夹名称后加上“[encoding]”来确定基础。

-verbose 发出有关访问/处理的编译单元的消息

-showWeaveInfo
发送有关编织的消息

-日志 文件 为编译器消息指定日志文件。

-progress 显示进度(需要 -log 模式)。

-time 显示速度信息。

-noExit 不要在编译结束时调用 System.exit(n)(如果没有错误,n=0)

-重复 N 重复编译过程 N 次(通常是做性能分析)。

-X终止编译后
导致编译器在编织前终止

-XaddSerialVersionUID
使编译器计算并将 SerialVersionUID 字段添加到任何类型
实现受方面影响的 Serializable。 该领域是
根据编织之前的等级计算。

-Xreweavable[:压缩]
(实验性 - 现在默认已弃用)在可重新编织的模式下运行编织器
导致它创建可以重新编织的编织类,受
限制尝试重新编织建议编织的所有类型
类型必须是可访问的。

-Xno内联
(实验性)不要内联建议

-X增量文件 文件
(实验性)这类似于增量模式,但使用文件而不是
用于控制编译器的标准输入。 它会在每次文件时重新编译
删除文件时更改并停止。

-XserializedAspects
(实验性)通常将方面声明为可序列化是错误的。 这个
选项消除了该限制。

-X不可重织
(实验性)创建随后不能由 AspectJ 重新编排的类文件。

-Xajruntimelevel:1.2,ajruntimelevel:1.5
(实验性)允许生成针对 1.2 或 1.5 级别的代码
AspectJ 运行时(默认 1.5)

文件 名称
ajc 接受带有以下任一类型的源文件 .Java 扩展名或 .aj 延期。 我们
通常使用 .Java 对于 AspectJ 系统中的所有文件——包含方面的文件
以及包含类的文件。 但是,如果您需要机械地
区分使用 AspectJ 附加功能的文件和纯文件
我们推荐使用 Java .aj 这些文件的扩展名。

我们不鼓励其他机械区分方式,例如命名约定
或子包有利于 .aj 延期。

· 文件名约定难以强制执行,并导致您的方面名称尴尬。
而不是 TracingAspect.java 我们建议使用 跟踪.aj (要不就 跟踪.java)
代替。

· 子包将方面移出系统中的自然位置,并可以创建一个
对特权方面的人为需求。 而不是添加一个子包
方面 我们建议使用 .aj 扩展名并将这些文件包含在您的
代替现有的软件包。

兼容性
AspectJ 是 Java 编程语言的兼容扩展。 AspectJ 编译器
坚持 爪哇岛 语言 规格, 其次 型号 (书)
http://java.sun.com/docs/books/jls/index.html 爪哇岛 在线会议 机械/机器
规格, 其次 型号 (书) http://java.sun.com/docs/books/vmspec/index.html
在任何 Java 2 兼容平台上运行。 它生成的代码可以在任何 Java 1.1 或
后来兼容的平台。 有关与 Java 和
AspectJ 的先前版本,请参阅 "" >.

国际私人包机价格项目范例
A 简单 例子

编译两个文件:

ajc HelloWorld.java 跟踪.java

An 例子 运用 -参数文件/@

为避免在命令行上指定文件名,请以行分隔的形式列出源文件
文本参数文件。 源文件路径可以是绝对的或相对于 argfile 的,并且可以
通过@-reference 包含其他 argfile。 以下文件 来源.lst 包含
绝对和相对文件以及@-references:

桂花
/home/user/src/Library.java
数据/Repository.java
数据/访问.java
@../../common/common.lst
@/home/user/src/lib.lst
视图/正文/ArrayView.java

使用 -argfile 或 @ 形式编译文件:

ajc -argfile 来源.lst
[email protected]

jikes 和 javac 也支持 Argfile,因此您可以在混合构建中使用这些文件。
但是,支持各不相同:

· 只有 ajc 接受命令行选项

· Jikes 和Javac 不接受内部@argfile 引用。

· Jikes 和Javac 只接受命令行上的@file 形式。

An 例子 运用 -输入路径 -方面路径

使用 -inpath 编织字节码:AspectJ 1.2 支持在输入 zip/jar 中编织 .class 文件
文件和目录。 使用输入jars就像编译相应的源文件一样,
并且所有二进制文件都被发送到输出。 尽管 Java 兼容的编译器可能在以下方面有所不同
他们的输出,ajc 应该将 javac、jikes、eclipse 产生的任何类文件作为输入,
当然,还有ajc。 -inpath 中包含的方面将像其他 .class 一样编织
文件,它们会像往常一样影响其他类型。

使用 -aspectpath 的方面库:AspectJ 1.1 支持从只读库编织
包含方面。 与输入 jar 一样,它们影响所有输入; 与输入罐不同,它们
它们本身不会作为输出受到影响或发出。 使用方面库编译的源代码
必须在其类路径上使用相同的方面库运行。

以下示例在命令行环境中构建跟踪示例; 它创建
一个只读方面库,编译一些用作输入字节码的类,并编译
带有方面库的类和其他源。

跟踪示例位于 AspectJ 发行版 ({aspectj}/doc/examples/tracing) 中。 这个
使用以下文件:

方面j1.1/
箱/
阿杰克
LIB /
方面jrt.jar
例子/
追踪/
圆环.java
示例Main.java
LIB /
抽象跟踪程序
TraceMyClasses.java
跟踪记录.lst
广场.java
跟踪库文件
tracev3.lst
两个DShape.java
版本3/
跟踪程序
TraceMyClasses.java

下面,路径分隔符为“;”,但文件分隔符为“/”。 所有命令都是
在一行上。 根据需要根据您的环境调整路径和命令。

设置路径、类路径和当前目录:

光盘示例
导出 ajrt=../lib/aspectjrt.jar
出口类路径=“$ajrt”
导出路径=“.../箱:$PATH"

构建只读跟踪库:

ajc -argfile 跟踪/tracelib.lst -outjar tracelib.jar

一步构建带有跟踪的应用程序:

ajc -aspectpath tracelib.jar -argfile tracking/notrace.lst -outjar tracedapp.jar

使用跟踪运行应用程序:

java -classpath "$ajrt;tracedapp.jar;tracelib.jar" tracking.ExampleMain

分两步使用从二进制文件进行跟踪来构建应用程序:

· (a) 构建应用程序类(为了演示使用 javac):

mkdir 类
javac -d 类跟踪/*.java
jar cfM app.jar -C 类。

· (b) 使用跟踪构建应用程序:

ajc -inpath app.jar -aspectpath tracelib.jar -outjar Tracedapp.jar

使用跟踪运行应用程序(同上):

java -classpath "$ajrt;tracedapp.jar;tracelib.jar" tracking.ExampleMain

在不跟踪的情况下运行应用程序:

java -classpath "app.jar" tracking.ExampleMain

方面J 编译 API
AspectJ 编译器完全用Java 实现,可以作为Java 类调用。
唯一应该被视为公共的接口是公共方法
org.aspectj.tools.ajc.Main. 例如, 主要(字符串[] 参数) 采取标准 阿杰克 命令
行参数。 这意味着运行编译器的另一种方法是

java的 org.aspectj.tools.ajc.Main [选项...[文件...]

要以编程方式访问编译器消息,请使用方法 setHolder(IMessageHolder
持有人)运行(字符串[] 参数, 消息持有人 持有人). 阿杰克 将每条消息报告给
持有人使用 IMessageHolder.handleMessage(..). 如果你只是想收集消息,
使用 消息处理器 身为你的 消息持有人. 例如,编译并运行
跟随 spectjtools.jar 在类路径上:

导入 org.aspectj.bridge.*;
导入 org.aspectj.tools.ajc.Main;
导入java.util.Arrays;

公共类 WrapAjc {
public static void main(String [] args){
主编译器 = new Main();
MessageHandler m = new MessageHandler();
编译器运行(参数,米);
IMessage[] ms = m.getMessages(null, true);
System.out.println("消息:" + 数组.asList(多发性硬化症));
}
}

痕迹 源文件 属性
与传统的 java 编译器不同,AspectJ 编译器在某些情况下可能会生成
来自多个源文件的类文件。 不幸的是,原始的 Java 类文件格式
不支持多个 SourceFile 属性。 为了确保所有源文件
信息可用,AspectJ 编译器在某些情况下可能会编码多个文件名
在 SourceFile 属性中。 当 Java VM 生成堆栈跟踪时,它使用这个
属性来指定源文件。

(AspectJ 1.0 编译器还支持 JSR-45 的 .class 文件扩展名。这些
允许兼容的调试器(例如 Java 1.4.1 中的 jdb)识别正确的文件和行
甚至为单个类提供了许多源文件。 JSR-45 支持计划用于 ajc
AspectJ 1.1,但不在初始版本中。 要获得完全可调试的 .class 文件,请使用
-XnoInline 选项。)

可能只有当您查看堆栈跟踪时才会看到这种格式
可能会遇到格式的痕迹

java.lang.NullPointerException异常
在 Main.new$constructor_call37(Main.java;SynchAspect.java[1k]:1030)

在哪里而不是通常的

文件:行号

格式,你看

File0;File1[Number1];File2[Number2] ... :LineNumber

在这种情况下, LineNumber 是行中的通常偏移量加上实际的“起始行”
源文件。 这意味着您使用 LineNumber 来识别源文件和查找
有问题的线路。 每个文件后 [括号] 中的数字告诉您虚拟“开始
行”的文件(第一个文件的开头为 0)。

在我们的空指针异常跟踪示例中,虚拟起始行是 1030。
由于文件 SynchAspect.java 在第 1000 [1k] 行“开始”,LineNumber 指向行
SynchAspect.java 的 30 个。

所以,当面对这样的堆栈跟踪时,找到实际源位置的方法是
查看“起始行”数字列表以找到显示行下方的数字
数字。 这是实际可以找到源位置的文件。 然后,减去
从显示的行号中找到“起始行”以找到其中的实际行号
文件中。

在仅来自单个源文件的类文件中,AspectJ 编译器生成
SourceFile 属性与传统 Java 编译器一致。

阿杰克(1)

使用 onworks.net 服务在线使用 ajc


免费服务器和工作站

下载 Windows 和 Linux 应用程序

Linux 命令

Ad