Компиляция проекта maven с классом из внешнего файла jar (которого нет в артефакте maven) - PullRequest
6 голосов
/ 26 ноября 2011

Я немного новичок в Java, и очень плохо знаком с Maven.Я мог бы использовать некоторую терминологию несовершенно.

Поскольку я разрабатываю свой проект, который я использую, для сборки использую maven, так как мне нужны классы, которые не являются частью основного языка Java, я добавил соответствующий<dependency> раздел моего pom.xml (обычно копируется с mvnbrowser.com, но я не очень хорошо понимаю его), и я смог использовать нужные мне классы.Отлично работает.

Теперь я столкнулся с Java-классом, который я хочу использовать, который, по-видимому, недоступен в артефакте maven.Это com.android.sdklib.build.ApkBuilder, который распространяется с Android SDK.Я написал отдельную Java-программу, чтобы заставить мой код работать;Я компилирую это с javac, а не с Maven, и это прекрасно работает.Для этого я помещаю jar-файл, содержащий нужный мне класс sdklib.jar, в мой каталог jre/lib/ext (/usr/local/jdk1.6.0/jre/lib/ext на машине с FreeBSD), и моя строка import com.android.sdklib.build.ApkBuilder прекрасно компилируется, и я могу сослаться на ApkBuilder и используйте его без проблем.

Теперь, когда я скопировал свой рабочий код в свой проект maven и попытался построить с mvn project, я получаю package com.android.sdklib.build does not exist ошибок в строке импорта и cannot find symbol: class ApkBuilder ошибки, где я ссылаюсь на ApkBuilder.

Осматривая сеть, я нашел android-maven-plugin здесь: http://code.google.com/p/maven-android-plugin/. Это отсылало меня к maven-android-sdk-deployer здесь: https://github.com/mosabua/maven-android-sdk-deployer. ЭтиСначала это звучало многообещающе, но, насколько я могу судить, их цель - разработка приложений для Android с использованием maven, а это не то, что я пытаюсь сделать.Я просто хочу, чтобы моя Java-программа манипулировала файлами Android apk, но сама моя Java-программа не должна запускаться на устройстве Android.Кроме того, Android SDK предназначен для работы с Linux, а не с FreeBSD, которую я использую, поэтому я не могу следовать инструкциям по установке maven-android-sdk-deployer.Я также нашел артефакт под названием maven-apkbuilder-plugin, но, похоже, он также предназначен для создания приложений для Android, и я не видел документации для него.Так что я не преследовал эти выводы.

Кажется, проще всего было бы просто заставить компилятор искать в моей папке jre/lib/ext файл sdklib.jar при запуске mvn package.Но, возможно, это не тот путь.Или, может быть, я могу внести простое изменение в pom.xml, которое заставит компилятор найти sdklib.jar.Я посмотрел документацию по pom http://maven.apache.org/pom.html#Build_Settings,, но не нашел способа сделать это.В любом случае, я уверен, что есть хотя бы одно решение;Я просто не знаю (пока).

Какие у меня варианты?Как лучше всего использовать класс ApkBuilder в моем проекте, построенном на Maven?Что я должен был прочитать, что позволило бы мне самому ответить на этот вопрос?Спасибо !!

1 Ответ

8 голосов
/ 26 ноября 2011

Если вы просто пытаетесь сослаться на jar, самое простое решение - добавить jar в ваш локальный репозиторий вручную. Подробнее см. здесь .

Ореховая скорлупа:

mvn install:install-file       \
    -Dfile=<path-to-file>      \
    -DgroupId=<group-id>       \
    -DartifactId=<artifact-id> \
    -Dversion=<version>        \
    -Dpackaging=jar

Вы можете использовать все, что вы хотите для group-id, artifact-id и version, но они должны быть чем-то напоминающими то, что вы ожидаете, если это будет доступно в репо.

Поскольку вы фактически не создаете проект Android, этого может быть достаточно.


Вот как бы я задал вопрос.

Как я могу использовать библиотеку, недоступную из репозитория Maven в моей сборке Maven?

(По совпадению, это, и более короткие варианты этого, должны вызвать ссылки, которые вы "должны" прочитать, чтобы ответить на ваш последний вопрос:)

...