我得到了一些自动生成的Java代码,我想在编译之前进行自动重构。主要是类重命名和包修改。
有没有可用于此的gradle或ant任务?
我得到了一些自动生成的Java代码,我想在编译之前进行自动重构。主要是类重命名和包修改。
有没有可用于此的gradle或ant任务?
\x ** 2 ==> \x * \x
uniquename1 ==> replacementpath1
foo.bar ==> baz.bar.foo
根据你的说法,你使用“xjc”生成代码,并且想要进行“大多数类重命名和包修改”,也许一些“xjc”选项可以实现你想要的功能:
-p <pkg> : specifies the target package
-b <file/dir> : specify external bindings files (each <file> must have its own -b)
If a directory is given, **/*.xjb is searched
<plugin>
<artifactId>maven-resources-plugin</artifactId>
<executions>
<execution>
<id>copy-resources</id>
<phase>process-resources</phase>
<goals>
<goal>copy-resources</goal>
</goals>
<configuration>
<outputDirectory>the.directory.for.the.classes.to.move.to</outputDirectory>
<resources>
<resource>
<directory>the.directory.of.ajc.classes</directory>
... do here the appropriate settings ...
</resource>
</resources>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>com.google.code.maven-replacer-plugin</groupId>
<artifactId>replacer</artifactId>
<version>1.5.2</version>
<executions>
<execution>
<phase>process-sources</phase>
<goals>
<goal>replace</goal>
</goals>
</execution>
</executions>
<configuration>
<includes>
<include>**/src/main/gen/**/**.java</include>
</includes>
<token>^package the.one.you.want.to.replace</token>
<value>package you.want.the.classes.to.be</value>
<regexFlags>
<regexFlag>MULTILINE</regexFlag>
</regexFlags>
</configuration>
</plugin>
<jxb:bindings version="1.0" xmlns:jxb="http://java.sun.com/xml/ns/jaxb"
xmlns:xs="http://www.w3.org/2001/XMLSchema">
<jxb:bindings schemaLocation="your.xsd" node="/xs:schema">
<jxb:schemaBindings>
<jxb:package name="the.package.name.you.want" />
</jxb:schemaBindings>
</jxb:bindings>
</jxb:bindings>
对于您想要自定义的每个类名,您需要:
<jxb:bindings node="//xs:complexType[@name='UglyTypeName']">
<jxb:class name="MyNiceClass"/>
</jxb:bindings>
将此内容保存到bindings.xjb
文件中,例如,并像下面这样运行xjc:
xjc your.xsd -b bindings.xjb
./gradlew install
)。之后,您可以按照插件文档(https://github.com/SpoonLabs/spoon-gradle-plugin#basic-usage)中的说明将其插入到您的项目中。您可以在使用 proguard 进行编译后执行此操作。Gradle 任务可用于 proguard。