问题似乎很明显,但实施对我来说非常困难.
我的目标是编写Ant构建脚本来编译一些需要 Annotation Processor 生成的另一个类的类.我有一个自定义注释和它的处理器实现(继承自AbstractProcessor类).
据我所知,我需要:
代码(第1步和第2步):
<target name="compileAnnotationProcessor">
<javac destdir="${OUTPUT_DIR}"
debug="true"
failonerror="true"
includeantruntime="false"
classpath="${java.class.path}">
<src>
<pathelement path="${PROJECT_DIR}/tools/src"/>
</src>
<include name="/path/to/annotation/processor/package/**"/>
</javac>
</target>
<target name="generateFilesWithAPT" depends="compileAnnotationProcessor">
<javac destdir="${OUTPUT_DIR}"
includeantruntime="false"
listfiles="false"
fork="true"
debug="true"
verbose="true">
<src>
<pathelement path="${PROJECT_DIR}/common/src/"/>
</src>
<include name="/path/to/files/to/compile/**"/>
<classpath>
<pathelement path="${OUTPUT_DIR}"/>
<pathelement path="${java.class.path}"/>
</classpath>
<compilerarg line="-proc:only"/>
<compilerarg line="-processorpath ${OUTPUT_DIR}/path/to/annotation/processor/package/annProcessorImplement"/>
</javac>
</target>
Run Code Online (Sandbox Code Playgroud)
实际上,第一个任务是执行良好并编译注释处理器实现的.class文件.它停在第二个任务.
Ant说: Annotation processing without compilation requested but no processors were found.
我究竟做错了什么?也许我应该把注释处理器类放在一个.jar?或者提供带.class扩展名的文件名作为-processorpath参数?我尝试了几个选项但没有任何帮助.. …
澄清
这个问题是在kotlin1.0版之前提出的.现在,示例中的语言语法已经过时,请遵循官方文档.
我正在玩kotlin和春季DI.我想使用基于构造函数的依赖注入,所以我需要注释构造函数.
我尝试了以下方法:
Configuration
Import(javaClass<DataSourceConfig>())
public open class AppConfig(dataSource: DataSource) {
private val dataSource: DataSource
Autowired {
this.dataSource = dataSource
}
}
Configuration
public open class DataSourceConfig {
Bean
public open fun dataSource(): DataSource {
// source omitted
}
Run Code Online (Sandbox Code Playgroud)
}
PS我正在使用Kotlin M10.1和Spring 4.1.4
更新: 在kotlin中可以注释构造函数.问题是不允许在@Configuration中使用基于构造函数的DI
我的目标是使用Ant启动tomcat.这是我的脚本:
<target name="tomcat-start">
<java jar="${tomcat.home}/bin/bootstrap.jar" fork="true" dir="${tomcat.home}">
<classpath>
<fileset dir="${tomcat.home}/bin">
<include name="bootstrap.jar"/>
<include name="tomcat-juli.jar"/>
</fileset>
</classpath>
<jvmarg value="-Dcatalina.home=${tomcat.home}"/>
</java>
</target>
Run Code Online (Sandbox Code Playgroud)
脚本执行后,我收到此输出:
java.lang.NoClassDefFoundError: org/apache/juli/logging/LogFactory
at org.apache.catalina.startup.Bootstrap.<clinit>(Bootstrap.java:60)
Caused by: java.lang.ClassNotFoundException: org.apache.juli.logging.LogFactory
at java.net.URLClassLoader$1.run(URLClassLoader.java:366)
at java.net.URLClassLoader$1.run(URLClassLoader.java:355)
at java.security.AccessController.doPrivileged(Native Method)
at java.net.URLClassLoader.findClass(URLClassLoader.java:354)
at java.lang.ClassLoader.loadClass(ClassLoader.java:425)
at sun.misc.Launcher$AppClassLoader.loadClass(Launcher.java:308)
at java.lang.ClassLoader.loadClass(ClassLoader.java:358)
... 1 more
Exception in thread "main"
Java Result: 1
Run Code Online (Sandbox Code Playgroud)
我已经检查过:org.apache.juli.logging.LogFactory上课了tomcat-juli.jar!
可能有什么不对?
众所周知,如果您没有明确定义它,运行时将为您的类生成serialVersionUID字段.
但是有可能在runitme中获得这个价值吗?是否有可能在运行时,引用.class,获取它的serialVersionUID?
根据这篇博客文章,将所有方法绑定React.createClass到 to 的this功能不是内置在 React 的类模型中。
是否可以默认开启?
我知道可以使用this.someMethod = this.ticksomeMethod.bind(this);技巧来手动执行此操作,但是是否可以对所有方法都执行此操作?还是我被迫bind为所有方法编写代码?
我现在拥有的代码示例:
import MessageStore from '../stores/MessageStore.js';
export default class Feed extends React.Component {
constructor() {
this.state = {messages: MessageStore.getAll()}
//can I avoid writing this for every single method?
this._onChange = this._onChange.bind(this);
}
_onChange() {
this.setState({messages: MessageStore.getAll()});
};
// componentDidMount, componentWillUnmount and render methods ommited
}
Run Code Online (Sandbox Code Playgroud) java ×3
annotations ×2
ant ×2
apt ×1
build ×1
ecmascript-6 ×1
javascript ×1
kotlin ×1
reactjs ×1
tomcat ×1