我的第一个问题是:“导出可部署的插件和片段”功能是否使用与产品导出功能相同的通用构建脚本?
我的主要问题是:为什么Export可部署的插件和片段会生成一个没有.class文件的jar?
在我的项目中,我们使用加载时间编织,并在成功导出项目后,不应用编织。原因是因为我导出的aspectj插件没有.class文件。
经过大量研究后,如何进行方面识别导出是指定义AspectJ编译器适配器。看起来这个编译器已加载并执行,但结果是没有.class文件。
有人有想法丢失了吗?
build.properties:
compilerAdapter=org.eclipse.ajdt.core.ant.AJDT_AjcCompilerAdapter
sourceFileExtensions=*.java, *.aj
source.. = src/
output.. = bin/
bin.includes = META-INF/,\
.
编辑: 如果我右键单击项目,如果按“生成Ant文件”,它会在@dot目标中生成这样的内容:
<javac destdir="${build.result.folder}/@dot" failonerror="${javacFailOnError}" verbose="${javacVerbose}" debug="${javacDebugInfo}" includeAntRuntime="no" bootclasspath="${bundleBootClasspath}" source="${bundleJavacSource}" target="${bundleJavacTarget}" compiler="org.eclipse.ajdt.core.ant.AJDT_AjcCompilerAdapter" >
<compilerarg line="${compilerArg}" compiler="${build.compiler}"/>
<classpath refid="@dot.classpath" />
<src path="src/" />
<exclude name="META-INF/MANIFEST.MF ." />
<compilerarg value="@${basedir}/javaCompiler...args" compiler="org.eclipse.ajdt.core.ant.AJDT_AjcCompilerAdapter" />
<compilerarg line="-log '${build.result.folder}/@dot${logExtension}'" compiler="org.eclipse.ajdt.core.ant.AJDT_AjcCompilerAdapter" />
</javac>
我认为这看起来是正确的,AJDT Compiler已设置好。如果此时未在属性文件中设置“compilerAdapter = org.eclipse.ajdt.core.ant.AJDT_AjcCompilerAdapter”,则会出现eclipse编译器。
运行这个生成的buildskript后(我认为“Export deployable Plugin ...”也会这样做)我唯一得到的javac输出是:test\TestAspect.aj skipped - don't know how to handle it
答案 0 :(得分:1)
我找到了解决这个问题的方法。似乎AspectJ编译器没有启动。在src中放入Dummy.java
文件后,AspectJ编译器会尝试编译所有* .aj文件。没有Dummy.java就没有!
在这一步之后,我看到了更多的javac登录。我看到jre / lib .. * .jars在目标的类路径中丢失了。所以我添加到build.properties文件:
compilerArg=-aspectpath ${bootclasspath}
bootclasspath是生成的构建脚本中的一个变量,它包含所有这些标准java jar。
这种奇怪的行为花了我很多时间,希望有人能从中受益。