相关疑难解决方法(0)

Android档案库(aar)vs标准jar

我一直在阅读一些关于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?

java android jar aar

124
推荐指数
4
解决办法
6万
查看次数

如何让Maven参战:爆炸而不是战争:战争

我有一个使用的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-2

53
推荐指数
4
解决办法
3万
查看次数

Maven插件执行另一个插件

我正在尝试创建一个新的插件来打包我的最新项目.我试图让这个插件依赖于maven-dependency-plugin来复制我所有的项目依赖项.

我已将此依赖项添加到我的插件的pom中,但我无法执行它.

我在我的插件主Mojo中有这个注释:

@execute goal="org.apache.maven.plugins:maven-dependency-plugin:copy"
Run Code Online (Sandbox Code Playgroud)

我已经为目标尝试了一些其他名称,例如依赖:复制和只是复制,但它们都以一条消息说明在我的插件中找不到所需的目标.我究竟做错了什么?

其次是我在哪里提供依赖插件的配置信息?

plugins maven-2

24
推荐指数
1
解决办法
2万
查看次数

如何在Maven插件运行之前执行一组目标?

我正在编写一个Maven插件(Mojo),它需要在运行之前执行一组标准的其他插件执行.

有没有一种机制可以在我的插件中声明所有目标,所以我不必依赖用户在POM中定义所有目标?

java maven-2 maven-plugin

14
推荐指数
1
解决办法
7741
查看次数

如何将插件mojos(目标)绑定到默认生命周期的几个阶段?

我的自定义maven插件有三个目标(mojos):

  • convert 分配到默认阶段: process-test-resources
  • generateStubs 分配到默认阶段: package
  • generateTests 分配到默认阶段: 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-plugin maven-3 maven

10
推荐指数
1
解决办法
841
查看次数

扩展的maven插件忽略配置

我做了一个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-plugin maven maven-jar-plugin

8
推荐指数
1
解决办法
142
查看次数

Maven战争神器与汽车延长

我正在尝试使用Maven生成用于在Vignette Portal上部署的工件.包装与war工件完全相同,但文件应该有car扩展名.

我尝试过的选项,但我无法完成.

  • 使用war插件并重命名最终的工件(继续添加.war扩展名)
  • 使用带zip描述符的程序集插件(无法将.zip更改为.car扩展名)
  • 创建一个新的包装类型,描述在这里(不能使用.汽车延长战争的插件)

哪个是最简单的'Maven'生成.car文件的方法?你能给我一些指导吗?

谢谢.

vignette maven-2 maven-3 maven-assembly-plugin

5
推荐指数
1
解决办法
2153
查看次数