我有一个library,它通过内联标记使用。它旨在被其他库用于将示例代码插入到他们的JavaDoc中。
图书馆已经完成了, hallelujah ,截至昨天,它已经在Maven Central上了。
我现在第一次将这个库实现到另一个项目中。该项目使用java.version
1.5编译其代码。但是taglet库需要1.7。不仅用于运行javadoc.exe
,还用于编译可选的“taglet定制器”类。
UPDATE :这些自定义程序类由每个开发人员创建 - 在他们的库中使用taglet库的人。自定义程序类(完全是可选的 - 它们只需要advanced features,并且您可以创建无),需要在执行javadoc.exe
之前进行编译。
所以它需要以下目标:
mvn compile
)mvn compilecodelet
?)javadoc.exe
(Java 1.7)(`mvn docs'?)mvn install
会按顺序称这三个目标。
我是Maven的新手,并希望了解如何做到这一点。这是我到目前为止所发现的:
这是项目当前的compile
目标:
<properties>
<java.version>1.5</java.version>
</properties>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version>
<configuration>
<encoding>UTF-8</encoding>
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
</plugin>
此项目的JDK似乎应该升级到1.7,主要类使用<source>
and <target>
flags设置为1.5
编译,并且使用这些标志设置为1.7的taglet-customizers编译。 / p>
一些参考文献:
maven-compiler-plugin
overview 如何设置这个额外的compilecodelet
目标,并设置整个项目以便它可以处理两个JDK版本?那么mvn install
(以及其他任何“主”目标)也会以正确的顺序称这个新的子目标?
正如我所说的,我是Maven的新手,虽然我开始理解点点滴滴,但我不知道如何将它们整合在一起。
感谢您的帮助。
答案 0 :(得分:1)
我同意其他评论你问题的人的疑虑,做你提出的问题对我来说似乎有风险和容易出错。将codelet扩展类放在一个单独的项目中,使用source&amp; amp;来构建它们可能会更好。目标为1.7,并在库POM的javadoc插件配置中添加对codelet扩展jar的依赖。
但如果不可能,我会尝试这样的事情。这是未经测试但应该给你的想法。
假设这个目录结构:
basedir
src
main
java
regularLibCodePackage
codeletExtensionPackage
<properties>
<java.version>1.5</java.version>
<!-- sets encoding for the whole Maven build -->
<project.build.sourceEncoding>UTF-8</project.build.sourceEncoding>
</properties>
<plugin>
<artifactId>maven-compiler-plugin</artifactId>
<version>2.3.2</version> <!--consider using latest plugin version -->
<configuration>
<!-- applies to all executions unless overridden by an execution -->
<source>${java.version}</source>
<target>${java.version}</target>
</configuration>
<executions>
<execution>
<id>default-compile</id>
<configuration>
<excludes>
<!-- Not sure exactly what the path should be here, the docs aren't
clear. Maybe it should be an absolute path, e.g.
${project.basedir}/src/main/java/codeletExtensionPackage?
When you figure it out let me know and I'll edit the response. -->
<exclude>codeletExtensionPackage</exclude>
</excludes>
</configuration>
</execution>
<execution>
<id>codelet-compile</id>
<phase>compile</phase>
<goals>
<goal>compile</goal>
</goals>
<configuration>
<source>1.7</source>
<target>1.7</target>
<excludes>
<!-- See note above about what to put here -->
<exclude>regularLibCodePackage</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
您是否需要将1.7类保留在最终的jar中?换句话说,运行Javadoc插件只需要额外的类吗?如果答案为“是”,那么您还需要调整默认的jar插件执行。 (如果答案是肯定的,这是将codelet类放在一个单独的项目中的另一个原因!)
<plugin>
<artifactId>maven-jar-plugin</artifactId>
<version>2.5</version> <!--consider using latest plugin version -->
<executions>
<execution>
<id>default-jar</id>
<configuration>
<excludes>
<exclude>codeletExtensionPackage</exclude>
</excludes>
</configuration>
</execution>
</executions>
</plugin>
我在编译器和jar插件配置中使用了排除,还有一个伴随包含块。我留给你找出工作配置,这应该让你开始。