我一直在阅读一些关于Gradle作为Android应用程序的标准构建系统的新采用的文章.好吧,来自标准的Java开发,我通常依赖于jar文件来构建我的项目.然而似乎安卓也有AAR包,这是相当于DLL在Windows操作系统文件,提到这里:
首先,您必须意识到Android平台不允许应用程序级别的"共享库".在"传统"编程语言平台,C,C++,Java中,您可以命名它,我们有这种共享运行时库的机制.(例如,Windows上的DLL,Unix上的DSO,JVM上的Jar等).但是,在Android上,除非您是Google或手机制造商,否则您无法做到这一点(请参阅下面的脚注1).作为应用程序开发人员,这可能是一个基本限制.在构建时和运行时"共享"或"重用"代码是软件工程实践中非常重要的一部分.由于上述限制,这在Android上相当困难(并非不可能,更难).
但是,我对这个概念有些怀疑.我的意思是,开发人员何时应该对其应用程序中包含aar依赖项感兴趣?这种依赖关系是否收紧到SDK最低版本?
例如,在一个项目中,我访问一个COM端口,我使用NDK预编译 .so库.如果我想分享这个实用程序,我是否必须创建一个aar?
我有一个使用的Maven pom <packaging>war</packaging>.但实际上,我不想构建war文件,我只想要收集所有依赖的jar并创建一个完整的部署目录.
所以我正在运行war:exploded生成部署目录的目标:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-war-plugin</artifactId>
<executions>
<execution>
<phase>package</phase>
<configuration>
<webappDirectory>target/${env}/deploy</webappDirectory>
<archiveClasses>true</archiveClasses>
</configuration>
<goals>
<goal>exploded</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
问题是,战争文件仍然建立.是否有一种简单的方法来<packaging>war</packaging>执行war:exploded目标而不是战争:战争目标?
或者还有另一种简单的方法吗?
我正在尝试创建一个新的插件来打包我的最新项目.我试图让这个插件依赖于maven-dependency-plugin来复制我所有的项目依赖项.
我已将此依赖项添加到我的插件的pom中,但我无法执行它.
我在我的插件主Mojo中有这个注释:
@execute goal="org.apache.maven.plugins:maven-dependency-plugin:copy"
Run Code Online (Sandbox Code Playgroud)
我已经为目标尝试了一些其他名称,例如依赖:复制和只是复制,但它们都以一条消息说明在我的插件中找不到所需的目标.我究竟做错了什么?
其次是我在哪里提供依赖插件的配置信息?
我正在编写一个Maven插件(Mojo),它需要在运行之前执行一组标准的其他插件执行.
有没有一种机制可以在我的插件中声明所有目标,所以我不必依赖用户在POM中定义所有目标?
我的自定义maven插件有三个目标(mojos):
convert 分配到默认阶段: process-test-resourcesgenerateStubs 分配到默认阶段: packagegenerateTests 分配到默认阶段: generate-test-sources如何将这三个mojo绑定到默认的生命周期阶段,这样用户可以简单地使用插件而无需特殊配置和项目的任何更改packaging?
用户应该简单地添加:
<plugin>
<groupId>io.codearte.accurest</groupId>
<artifactId>accurest-maven-plugin</artifactId>
<extensions>true</extensions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
代替
<plugin>
<groupId>io.codearte.accurest</groupId>
<artifactId>accurest-maven-plugin</artifactId>
<executions>
<execution>
<goals>
<goal>convert</goal>
<goal>generateStubs</goal>
<goal>generateTests</goal>
</goals>
</execution>
</executions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
我可以通过components.xml以下方式实现这一点,但这需要一些丑陋的黑客(指定不存在阶段 - ugly-fix)并且我不确定,如果此解决方案在所有情况下都能正常工作.
<component-set>
<components>
<component>
<role>org.apache.maven.lifecycle.Lifecycle</role>
<implementation>org.apache.maven.lifecycle.Lifecycle</implementation>
<role-hint>accurest</role-hint>
<configuration>
<id>accurest</id>
<phases>
<phase>ugly-fix</phase> // plugin fail without this
</phases>
<default-phases>
<process-test-resources>
io.codearte.accurest:accurest-maven-plugin:${project.version}:convert
</process-test-resources>
<generate-test-sources>
io.codearte.accurest:accurest-maven-plugin:${project.version}:generateTests
</generate-test-sources>
<package>
io.codearte.accurest:accurest-maven-plugin:${project.version}:generateStubs
</package>
</default-phases>
</configuration>
</component>
</components>
</component-set>
Run Code Online (Sandbox Code Playgroud)
它是否正确?是更好的方法来做这样的配置?
更多信息:
我做了一个maven插件,覆盖了这个文档之后的"maven-jar-plugin": 如何为Maven创建一个新的包装类型?
你可以在这里找到我的插件:http: //mvnrepository.com/artifact/org.lucee/lco-plugin/1.0
来源是:https: //github.com/lucee/lco-maven-plugin
我只更改了扩展名,没有别的,我按预期得到了正确的扩展名,问题是配置被忽略了
<plugin>
<groupId>org.lucee</groupId>
<artifactId>lco-plugin</artifactId>
<version>1.01-SNAPSHOT</version>
<!-- when I use this the configuration works!
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-jar-plugin</artifactId>
<version>2.6</version>-->
<configuration>
<archive>
<manifestFile>${project.build.outputDirectory}/META-INF/MANIFEST.MF</manifestFile>
</archive>
</configuration>
<extensions>true</extensions>
</plugin>
Run Code Online (Sandbox Code Playgroud)
知道我做错了什么吗?
我正在尝试使用Maven生成用于在Vignette Portal上部署的工件.包装与war工件完全相同,但文件应该有car扩展名.
我尝试过的选项,但我无法完成.
哪个是最简单的'Maven'生成.car文件的方法?你能给我一些指导吗?
谢谢.