小编ivs*_*tas的帖子

如何用Ant编译注释处理器?

问题似乎很明显,但实施对我来说非常困难.

我的目标是编写Ant构建脚本编译一些需要 Annotation Processor 生成另一个类的类.我有一个自定义注释和它的处理器实现(继承自AbstractProcessor类).

据我所知,我需要:

  1. 编译注释处理器
  2. 在一些带注释的类上运行编译器以生成新的类.
  3. 编译需要生成的类的类

代码(第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参数?我尝试了几个选项但没有任何帮助.. …

java ant apt annotations build

8
推荐指数
1
解决办法
3891
查看次数

是否可以在Kotlin中注释类构造函数

澄清 这个问题是在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)

}

但它不起作用.甚至可以在kotlin中注释构造函数吗?

PS我正在使用Kotlin M10.1和Spring 4.1.4

更新: 在kotlin中可以注释构造函数.问题是不允许在@Configuration中使用基于构造函数的DI

annotations kotlin

8
推荐指数
1
解决办法
3171
查看次数

从Ant启动tomcat 7时的java.lang.NoClassDefFoundError

我的目标是使用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!

可能有什么不对?

java ant tomcat

7
推荐指数
1
解决办法
3万
查看次数

是否有可能在运行时获取java类的serialVersionUID

众所周知,如果您没有明确定义它,运行时将为您的类生成serialVersionUID字段.

但是有可能在runitme中获得这个价值吗?是否有可能在运行时,引用.class,获取它的serialVersionUID

java serialization

7
推荐指数
1
解决办法
2910
查看次数

是否可以为 React 的类模型打开 React.js 自动绑定

根据这篇博客文章,将所有方法绑定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)

javascript ecmascript-6 reactjs

5
推荐指数
1
解决办法
859
查看次数