POM使用不同的Java版本,如何在POM中有一个额外的编译目标?
我有一个通过内联标记使用的。它打算被其他库使用,例如将示例代码插入到它们的JavaDoc中 图书馆已经建好了,哈利路亚,从昨天开始,现在开始了 我现在第一次将这个库实现到另一个项目中。该项目使用POM使用不同的Java版本,如何在POM中有一个额外的编译目标?,java,maven,Java,Maven,我有一个通过内联标记使用的。它打算被其他库使用,例如将示例代码插入到它们的JavaDoc中 图书馆已经建好了,哈利路亚,从昨天开始,现在开始了 我现在第一次将这个库实现到另一个项目中。该项目使用java.version1.5编译其代码。但是taglet库需要1.7。不仅用于运行javadoc.exe,还用于编译可选的“taglet customizer”类 更新:这些定制器类由每个开发人员创建——即在其库中使用taglet库的人员。在执行javadoc.exe之前,需要编译定制器类(这是完全可
java.version
1.5编译其代码。但是taglet库需要1.7。不仅用于运行javadoc.exe
,还用于编译可选的“taglet customizer”类
更新:这些定制器类由每个开发人员创建——即在其库中使用taglet库的人员。在执行
javadoc.exe
之前,需要编译定制器类(这是完全可选的——它们只用于,您可以不创建任何定制器类)
因此,它需要实现以下目标:
mvn Compile
)mvn CompileCollet
?)javadoc.exe
(Java1.7)('MVNDocs'?)mvn install
将依次调用这三个目标
我是Maven的新手,希望你能给我一些建议。这是我到目前为止发现的:
以下是项目当前的编译目标:
<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>
1.5
设置为1.5
,编译的taglet定制程序将这些标志设置为1.7
一些参考资料:
maven编译器插件
- 但是我相信唯一的JDK hi
我如何设置这个额外的compileCollet
目标,并设置整个项目,使其能够处理两个JDK版本?因此,mvn install
(以及任何其他“主”目标)也按正确的顺序调用这个新的子目标
正如我所说的,我对Maven是新手,虽然我开始了解一些细节,但我还不知道如何将这些结合起来
谢谢你的帮助。我和其他对你的问题发表评论的人一样,对我来说,做你要做的事似乎有风险而且容易出错。最好将codelet扩展类放在一个单独的项目中,使用1.7的source&target构建它们,并在库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>
basedir
src
主要的
JAVA
regularLibCodePackage
codeletExtensionPackage
1.5
UTF-8
maven编译器插件
2.3.2
${java.version}
${java.version}
默认编译
codeletExtensionPackage
小码编译
编译
编译
1.7
1.7
regularLibCodePackage
您是否需要将1.7类保留在最终jar之外?换句话说,运行Javadoc插件仅仅需要额外的类吗?如果答案是“是”,那么您还需要调整默认的jar插件执行。(如果答案是肯定的,这是将codelet类放在单独项目中的另一个原因!)
maven jar插件
2.5
默认jar
codeletExtensionPackage
我在编译器和jar插件配置中使用了excludes,还有一个附带的includes块。我把它留给你去弄清楚工作配置,这应该让你开始。听起来你走错了方向,因为据我所知,这个标记应该在JavaDoc中使用,所以你必须通过。它是通过JavaDoc执行的,这是真的。但它是可选的,在运行JavaDoc/库的taglets之前,必须首先编译“customizer”类。本汇编要求1.7。但是库本身需要1.5.0版本,所以您应该创建tagletlib(jar文件),并将其用作mavanjavadoc插件的依赖项。除此之外,如果库需要1.5版本,它应该使用Java1.7运行。所以我看不出有什么问题,我不清楚。每个库的开发人员都希望在库中使用Codelet(taglet库),他们将创建这些定制器类。它们用于定制特定示例代码的输出(它们是可选的……只有当您想使用它们时才需要它们——仅供参考:您可以不用创建任何定制器就可以使用它们)。必须在执行javadoc.exe
之前编译自定义程序类。Oracle不再支持1.5,为什么要这样做?告诉客户使用程序并升级。这样看来,我的问题是一个问题。我将发布一个新的问题,我认为这是问题的根源,而不是停留在这个多版本编译的假设解决方案上。正如我提到的,我对Maven是新手。我认为我设计项目的方式,在哪里以及如何创建这些定制器函数(实际上是函数,不一定是类),可能需要改变。为了回答您的问题,JavaDoc只需要定制器函数。谢谢你的洞察力。
<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>