假设我有一个项目,它使用了可以在Maven存储库中找到的依赖项。然而,假设将要下载的jar文件的格式不适合我的项目(例如,如果我的maven项目是一个Android项目,并且jar的编译方式是dex工具不喜欢的)。我想要做的是下载该依赖项的源代码版本。然而,一旦我添加了java- source,这些类就不能再从我自己的源代码中访问了。我希望maven下载源代码jar,编译其中的java文件,并将编译后的类文件放在类路径中。这有可能吗?
我唯一的选择是自己创建一个包含该库的新项目,但这很麻烦。
发布于 2011-09-16 14:03:45
您可以执行以下操作:
下面是一些代码片段。
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-dependency-plugin</artifactId>
<version>2.2</version>
<executions>
<execution>
<id>unpack</id>
<phase>process-sources</phase>
<goals>
<goal>unpack</goal>
</goals>
<configuration>
<artifactItems>
<artifactItem>
<groupId>my.group</groupId>
<artifactId>my.artifact</artifactId>
<version>my.artifact.version</version>
<classifier>sources</classifier>
<overWrite>false</overWrite>
<outputDirectory>${project.build.directory}/my.artifact</outputDirectory>
</artifactItem>
</artifactItems>
</configuration>
</execution>
</executions>
</plugin>
<plugin>
<groupId>org.codehaus.mojo</groupId>
<artifactId>build-helper-maven-plugin</artifactId>
<version>1.5</version>
<executions>
<execution>
<id>add-source</id>
<phase>generate-sources</phase>
<goals>
<goal>add-source</goal>
</goals>
<configuration>
<sources>
<source>${project.build.directory}/my.artifact.source</source>
</sources>
</configuration>
</execution>
</executions>
</plugin>发布于 2011-09-16 04:01:00
使用Maven下载源代码包非常简单:
<dependency>
<groupId>log4j</groupId>
<artifactId>log4j</artifactId>
<version>1.2.16</version>
<classifier>sources</classifier>
</dependency>如何配置Maven来扩展这个依赖,然后编译它的内容,这超出了我的能力范围。
您是否考虑过ANT解决方案?ivy plug-in为其提供了类似Maven的功能,并且groovy plug-in可用于编写您的特殊构建逻辑的脚本:
build.xml
Ivy使用“配置”(类似于Maven作用域)对依赖项进行分组。
在本例中,"sources“配置包含下载的源包。这些文件被放在一个引用的文件集中,groovy任务可以按顺序处理该文件。
将下载的每个源jar解压到"build/src“目录中:
<project name="demo" default="unzip-sources" xmlns:ivy="antlib:org.apache.ivy.ant">
<property name="build.dir" location="build"/>
<property name="src.dir" location="${build.dir}/src"/>
<target name="resolve">
<ivy:resolve/>
<ivy:cachepath pathid="build.path" conf="build"/>
<ivy:cachefileset setid="sourcezips" conf="sources"/>
</target>
<target name="unzip-sources" depends="resolve">
<taskdef name="groovy" classname="org.codehaus.groovy.ant.Groovy" classpathref="build.path"/>
<groovy>
project.references.sourcezips.each {
ant.unzip(src: it, dest: properties["src.dir"])
}
</groovy>
</target>
<target name="clean">
<delete dir="${build.dir}"/>
</target>
</project>ivy.xml
每个源包依赖项都使用"sources“配置。这直接映射到Maven模块的“源”范围。
<ivy-module version="2.0">
<info organisation="org.myspotontheweb" module="demo"/>
<configurations>
<conf name="build" description="ANT tasks"/>
<conf name="sources" description="Source packages"/>
</configurations>
<dependencies>
<!-- Build dependencies -->
<dependency org="org.codehaus.groovy" name="groovy-all" rev="1.8.2" conf="build->default"/>
<!-- Source dependencies -->
<dependency org="log4j" name="log4j" rev="1.2.16" conf="sources"/>
<dependency org="commons-lang" name="commons-lang" rev="2.6" conf="sources"/>
</dependencies>
</ivy-module>https://stackoverflow.com/questions/7432549
复制相似问题