2013-04-29 4 views
3

중앙 Maven 저장소에서 사용할 수 있도록 만든 작은 안드로이드 라이브러리를 만들었습니다. 단계를 수행 : 나는mvn release 수행 : perform

https://docs.sonatype.org/display/Repository/Sonatype+OSS+Maven+Repository+Usage+Guide

모든 내가 MVN 릴리스 될 때까지 잘 동작하는 것 여기에 나열된 단계를 수행하려합니다. 그러면 다음 오류가 발생합니다.

[INFO] /Volumes/AndroidDisk/persistent-cookies/target/checkout/AndroidManifest.xml:5: error: Error: No resource found that matches the given name (at 'icon' with value '@drawable/icon'). [INFO] /Volumes/AndroidDisk/persistent-cookies/target/checkout/AndroidManifest.xml:5: error: Error: No resource found that matches the given name (at 'label' with value '@string/app_name'). [ERROR] Error when generating sources. org.apache.maven.plugin.MojoExecutionException: at com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.generateR(GenerateSourcesMojo.java:418) at com.jayway.maven.plugins.android.phase01generatesources.GenerateSourcesMojo.execute(GenerateSourcesMojo.java:107) at org.apache.maven.plugin.DefaultBuildPluginManager.executeMojo(DefaultBuildPluginManager.java:101) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:209) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:153) at org.apache.maven.lifecycle.internal.MojoExecutor.execute(MojoExecutor.java:145) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:84) at org.apache.maven.lifecycle.internal.LifecycleModuleBuilder.buildProject(LifecycleModuleBuilder.java:59) at org.apache.maven.lifecycle.internal.LifecycleStarter.singleThreadedBuild(LifecycleStarter.java:183) at org.apache.maven.lifecycle.internal.LifecycleStarter.execute(LifecycleStarter.java:161) at org.apache.maven.DefaultMaven.doExecute(DefaultMaven.java:319) at org.apache.maven.DefaultMaven.execute(DefaultMaven.java:156) at org.apache.maven.cli.MavenCli.execute(MavenCli.java:537) at org.apache.maven.cli.MavenCli.doMain(MavenCli.java:196) at org.apache.maven.cli.MavenCli.main(MavenCli.java:141) at sun.reflect.NativeMethodAccessorImpl.invoke0(Native Method) at sun.reflect.NativeMethodAccessorImpl.invoke(NativeMethodAccessorImpl.java:39) at sun.reflect.DelegatingMethodAccessorImpl.invoke(DelegatingMethodAccessorImpl.java:25) at java.lang.reflect.Method.invoke(Method.java:597) at org.codehaus.plexus.classworlds.launcher.Launcher.launchEnhanced(Launcher.java:290) at org.codehaus.plexus.classworlds.launcher.Launcher.launch(Launcher.java:230) at org.codehaus.plexus.classworlds.launcher.Launcher.mainWithExitCode(Launcher.java:409) at org.codehaus.plexus.classworlds.launcher.Launcher.main(Launcher.java:352) Caused by: com.jayway.maven.plugins.android.ExecutionException: ANDROID-040-001: Could not execute: Command = /bin/sh -c cd /Volumes/AndroidDisk/persistent-cookies/target/checkout && /Users/sam/Development/android-sdk-macosx/platform-tools/aapt package -m -J /Volumes/AndroidDisk/persistent-cookies/target/checkout/target/generated-sources/r -M /Volumes/AndroidDisk/persistent-cookies/target/checkout/AndroidManifest.xml --auto-add-overlay -I /Users/sam/Development/android-sdk-macosx/platforms/android-17/android.jar, Result = 1

그래서 res 폴더를 찾는 데 문제가있는 것 같습니다. mvn 새로 설치를 수행하면 프로젝트가 정상적으로 빌드됩니다. 내가 잘못 뭐하는 거지

POM

...

<?xml version="1.0" encoding="UTF-8"?> 
<project xmlns="http://maven.apache.org/POM/4.0.0" xmlns:xsi="http://www.w3.org/2001/XMLSchema-instance" xsi:schemaLocation="http://maven.apache.org/POM/4.0.0 http://maven.apache.org/maven-v4_0_0.xsd"> 
    <modelVersion>4.0.0</modelVersion> 
    <groupId>com.github.samddman</groupId> 
    <artifactId>persistentcookiestore</artifactId> 
    <version>1.0.1-SNAPSHOT</version> 
    <packaging>apklib</packaging> 
    <name>persistentcookies</name> 
    <description>A cookie store which persists cookies across app restarts</description> 
    <parent> 
     <groupId>org.sonatype.oss</groupId> 
     <artifactId>oss-parent</artifactId> 
     <version>7</version> 
    </parent> 
    <url>https://github.com/samddman/persistent-cookies</url> 
    <licenses> 
     <license> 
      <name>GNU General Public License, version 2 (GPL-2.0)</name> 
      <url>http://opensource.org/licenses/gpl-2.0.php</url> 
     </license> 
    </licenses> 
    <scm> 
     <url>[email protected]:samddman/persistent-cookies.git</url> 
     <connection>scm:git:[email protected]:samddman/persistent-cookies.git</connection> 
     <developerConnection>scm:git:[email protected]:samddman/persistent-cookies.git</developerConnection> 
    </scm> 
    <dependencies> 
     <dependency> 
      <groupId>org.json</groupId> 
      <artifactId>json</artifactId> 
      <version>20090211</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>com.pivotallabs</groupId> 
      <artifactId>robolectric</artifactId> 
      <version>1.1</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>junit</groupId> 
      <artifactId>junit</artifactId> 
      <version>4.8.2</version> 
      <scope>test</scope> 
     </dependency> 
     <dependency> 
      <groupId>android</groupId> 
      <artifactId>android</artifactId> 
      <version>4.2.2_r2</version> 
      <scope>provided</scope> 
     </dependency> 
    </dependencies> 
    <build> 
     <plugins> 
    <!--   <plugin> 
       <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
       <artifactId>android-maven-plugin</artifactId> 
       <version>3.3.2</version> 
       <configuration> 
        <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile> 
        <sdk> 
         <platform>17</platform> 
        </sdk> 
        <undeployBeforeDeploy>true</undeployBeforeDeploy> 
       </configuration> 
       <extensions>true</extensions> 
      </plugin>  --> 
      <plugin> 
       <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
       <artifactId>android-maven-plugin</artifactId> 
       <version>3.3.2</version> 
       <configuration> 
        <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile> 
        <assetsDirectory>${project.basedir}/assets</assetsDirectory> 
        <resourceDirectory>${project.basedir}/res</resourceDirectory> 
        <nativeLibrariesDirectory>${project.basedir}/src/main/native</nativeLibrariesDirectory> 
        <sdk> 
         <platform>17</platform> 
        </sdk> 
        <undeployBeforeDeploy>true</undeployBeforeDeploy> 
       </configuration> 
       <extensions>true</extensions> 
      </plugin> 
      <plugin> 
       <groupId>org.apache.maven.plugins</groupId> 
       <artifactId>maven-resources-plugin</artifactId> 
       <version>2.3</version> 
       <executions> 
        <execution> 
         <phase>initialize</phase> 
         <goals> 
          <goal>copy-resources</goal> 
         </goals> 
         <configuration> 
          <outputDirectory>${project.basedir}/res</outputDirectory> 
          <resources> 
           <resource> 
            <directory>${project.basedir}/src/templates/res</directory> 
            <targetPath>${project.basedir}/res</targetPath> 
            <filtering>false</filtering> 
           </resource> 
          </resources> 
         </configuration> 
        </execution> 
       </executions> 
      </plugin> 
      <plugin> 
       <artifactId>maven-compiler-plugin</artifactId> 
       <version>2.3.2</version> 
       <configuration> 
        <source>1.6</source> 
        <target>1.6</target> 
       </configuration> 
      </plugin> 
     </plugins> 
    </build> 
</project> 

?

답변

1

Maven을 사용하여 크로스 플랫폼 프로젝트를 빌드하고, 내 안드로이드 pom.xml 파일에는 핵심 프로젝트에서 애셋을 가져 오기위한 다음 플러그인이 있습니다. 출력을 빌드하려면 mvn clean install을 사용합니다. 일부 컴퓨터에서는 구성에 문제가 있었으며 빌드하기 전에 안드로이드 프로젝트 폴더에 수동으로 애셋을 복사해야했습니다.

현재이 구성이 저에게 효과적입니다.

<plugins> 
<plugin> 
    <groupId>com.pyx4j</groupId> 
    <artifactId>maven-junction-plugin</artifactId> 
    <version>1.0.3</version> 
    <!-- generate a symlink to our assets directory in the proper location --> 
    <configuration> 
     <links> 
     <link> 
      <src>${basedir}/../assets/src/main/resources/assets</src> 
      <dst>${basedir}/assets</dst> 
     </link> 
     </links> 
    </configuration> 
    </plugin>  
    <plugin> 
    <groupId>com.jayway.maven.plugins.android.generation2</groupId> 
    <artifactId>android-maven-plugin</artifactId> 
    <version>${android.maven.version}</version> 
    <configuration> 
     <androidManifestFile>${project.basedir}/AndroidManifest.xml</androidManifestFile> 
     <assetsDirectory>${project.basedir}/assets</assetsDirectory> 
     <resourceDirectory>${project.basedir}/res</resourceDirectory> 
     <sdk> 
     <platform>16</platform> 
     <path>C:\sdks\android-sdks</path> 
     </sdk> 
     <deleteConflictingFiles>true</deleteConflictingFiles> 
     <undeployBeforeDeploy>true</undeployBeforeDeploy> 
     <jvmArguments> 
     <jvmArgument>-Xmx1024m</jvmArgument> 
     </jvmArguments> 
     <dex> 
     <jvmArguments> 
      <jvmArgument>-Xmx1024m</jvmArgument> 
     </jvmArguments> 
     </dex> 
    </configuration> 
    <extensions>true</extensions> 
    </plugin> 
</plugins> 
0

전체 프로젝트가 SCM에 올바르게 체크인되어 있습니까? release : perform는 SCM 태그에서 release : prepare가 생성 된 빌드를 수행합니다. 따라서 실수로 파일을 체크인하지 않은 경우 릴리스 중에 누락 될 수 있습니다. 수행하십시오.

수동으로 대상/체크 아웃 폴더를 검사하여 모든 항목이 있는지 확인하거나 대상/체크 아웃 내에서 수동으로 mvn clean 패키지를 호출 할 수 있습니다.

관련 문제