Способ sizeof
- это правильный путь iff , который вы имеете в виду массивы, не полученные в качестве параметров. Массив, отправленный как параметр функции, рассматривается как указатель, поэтому sizeof
вернет размер указателя вместо массива.
Таким образом, внутри функций этот метод не работает. Вместо этого всегда передавайте дополнительный параметр size_t size
, указывающий количество элементов в массиве.
Тест:
#include
#include
void printSizeOf(int intArray[]);
void printLength(int intArray[]);
int main(int argc, char* argv[])
{
int array[] = { 0, 1, 2, 3, 4, 5, 6 };
printf("sizeof of array: %d\n", (int) sizeof(array));
printSizeOf(array);
printf("Length of array: %d\n", (int)( sizeof(array) / sizeof(array[0]) ));
printLength(array);
}
void printSizeOf(int intArray[])
{
printf("sizeof of parameter: %d\n", (int) sizeof(intArray));
}
void printLength(int intArray[])
{
printf("Length of parameter: %d\n", (int)( sizeof(intArray) / sizeof(intArray[0]) ));
}
Выход (в 64-разрядной ОС Linux):
sizeof of array: 28
sizeof of parameter: 8
Length of array: 7
Length of parameter: 2
Вывод (в 32-разрядной ОС Windows):
sizeof of array: 28
sizeof of parameter: 4
Length of array: 7
Length of parameter: 1
blockquote>
- mvn install
Вы можете написать код ниже в командной строке или если вы используете eclipse builtin maven, щелкните правой кнопкой мыши по проекту -> Run As -> run configurations ... -> в левой панели щелкните правой кнопкой мыши на Maven Build -> new configuration -> напишите код в Goals & amp; в базовом каталоге: $ {project_loc: NameOfYourProject} -> Run
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> -DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging> -DgeneratePom=true
Где каждый относится к:
& lt; путь к файлу>: путь к файлу для загрузки, например, -> c: \ kaptcha-2.3.jar
& lt; group-id>: группа, в которой файл должен быть зарегистрирован, например, -> com.google.code
& lt; artifact-id>: имя артефакта для файла, например, -> kaptcha
& lt; version>: версия файла e.g -> 2.3
& lt; упаковка>: упаковка файла, например. -> jar
2. После установки просто объявляет jar в pom.xml.
blockquote><dependency> <groupId>com.google.code</groupId> <artifactId>kaptcha</artifactId> <version>2.3</version> </dependency>
Чтобы установить стороннюю банку, пожалуйста, вызовите команду, как показано ниже
mvn install:install-file -DgroupId= -DartifactId= -Dversion= -Dpackaging=jar -Dfile=path
Вы можете напрямую добавлять локальные зависимости (как указано в проекте build maven с включенными библиотеками propriatery ):
<dependency>
<groupId>com.sample</groupId>
<artifactId>sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>${project.basedir}/src/main/resources/yourJar.jar</systemPath>
</dependency>
<systemPath>
предлагается папка внутри проекта. Будет ли иметь смысл хранить такие банки в папке, внешней по отношению к проекту? Похоже на небольшой псевдо-репозиторий. Я предполагаю, что Maven вытаскивает копию фляги из такой внешней папки.
– Basil Bourque
6 June 2015 в 21:49
artifactId
и groupId
неправильными?
– theonlygusti
8 March 2017 в 09:18
ЭТО ОТВЕТ ТОЛЬКО ДЛЯ ПОЛЬЗОВАТЕЛЕЙ ECLIPSE:
Если вы используете Eclipse, поместите банку в lib /, щелкните правой кнопкой мыши на имени баннера и нажмите «добавить в путь сборки». Eclipse создаст «ссылки библиотек» и поместит банку для вас
. Он разрешил импорт банки сразу в программе для меня
.classpath
, но ваша сборка maven mvn package
будет бросками, когда вы начнете использовать эту зависимость, так как maven не имеет определения ее, и она должна быть только в pom.xml
– Paul Verest
25 July 2017 в 15:10
Добавьте свой собственный локальный JAR в файл POM и используйте его в сборке maven.
mvn install:install-file -Dfile=path-to-jar -DgroupId=owngroupid -DartifactId=ownartifactid -Dversion=ownversion -Dpackaging=jar
Например:
mvn install:install-file -Dfile=path-to-jar -DgroupId=com.decompiler -DartifactId=jd-core-java -Dversion=1.2 -Dpackaging=jar
Затем добавьте его в POM следующим образом:
В вашем локальном репозитории вы можете установить свою банку, выпустив команды
mvn install:install-file -Dfile=<path-to-file> -DgroupId=<group-id> \
-DartifactId=<artifact-id> -Dversion=<version> -Dpackaging=<packaging>
Следуйте этой полезной ссылке , чтобы сделать то же самое с сайта mkyoung. Вы также можете проверить руководство maven для того же
Конечно, вы можете добавить банки в эту папку. Но, возможно, это не то, чего вы хотите достичь ...
Если вам нужны эти банки для компиляции, проверьте этот связанный вопрос: Могу ли я добавить банки в maven 2 build classpath без их установки?
Кроме того, прежде чем кто-либо подскажет это, НЕ используйте системную область.
Очень быстрый и грязный способ - указать на локальный файл:
<dependency>
<groupId>sample</groupId>
<artifactId>com.sample</artifactId>
<version>1.0</version>
<scope>system</scope>
<systemPath>C:\DEV\myfunnylib\yourJar.jar</systemPath>
</dependency>
Однако это будет жить только на вашем компьютере (очевидно), для совместного использования обычно имеет смысл использовать подходящий m2 архив (nexus / artifactory) или если у вас нет ни одного из них или вы не хотите устанавливать локальный структурированный архив maven и настраивать «репозиторий» в вашем pom: local:
<repositories>
<repository>
<id>my-local-repo</id>
<url>file://C:/DEV//mymvnrepo</url>
</repository>
</repositories>
remote:
<repositories>
<repository>
<id>my-remote-repo</id>
<url>http://192.168.0.1/whatever/mavenserver/youwant/repo</url>
</repository>
</repositories>
У меня была такая же проблема с ojdbc6. Я видел эту ссылку, но она не работала. Команда была правильной, но мне нужен еще один параметр,
Это ссылка: http://roufid.com/3-ways-to-add-local-jar-to-maven- project /
Вот пример:
install:install-file -Dfile=C:\driversDB\ojdbc6.jar -DgroupId=com.oracle -DartifactId=ojdbc6 -Dversion=11.2.0.3 -Dpackaging=jar
По какой-то причине, в веб-приложении, которое я обслуживаю, ни решение Alireza Fattahi , ни решение JJ Roman работало правильно. В обоих случаях компиляция идет хорошо (она видит банку), но упаковка не может содержать банку внутри войны.
Единственный способ, которым я смог заставить его работать, - положить банку на /src/main/webapp/WEB-INF/lib/
, а затем объединить его с решением Фаттахса или Романа.
:
mvn install:install-file -Dfile=c:\kaptcha-{version}.jar -DgroupId=com.google.code
-DartifactId=kaptcha -Dversion={version} -Dpackaging=jar
Во-первых, я хотел бы дать ответ на этот ответ анонимному пользователю stackoverflow - я уверен, что видел аналогичный ответ здесь раньше, - но теперь я не могу его найти.
Лучшим вариантом для локальных файлов jar в качестве зависимости является создание локального репозитория maven. Такое репо - это не что иное, как правильная структура каталогов с файлами pom.
В моем примере: у меня есть главный проект в ${master_project}
месте, а subroject1 находится на ${master_project}/${subproject1}
, тогда я создаю mvn-репозиторий в: ${master_project}/local-maven-repo
В файле pom в подпроекте1 необходимо указать репозиторий ${master_project}/${subproject1}/pom.xml
, который будет использовать путь к файлу в качестве параметра url:
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.parent.basedir}/local-maven-repo</url>
</repository>
</repositories>
Зависимость может быть задана как для любого другого репозитория. Это делает ваш репозиторий pom независимым. Например, если желаемая банка доступна в центральном центре maven, вам просто нужно удалить ее из своего локального репо, и она будет вытащена из репо по умолчанию.
<dependency>
<groupId>org.apache.felix</groupId>
<artifactId>org.apache.felix.servicebinder</artifactId>
<version>0.9.0-SNAPSHOT</version>
</dependency>
Последнее, но не менее важное: добавить файл jar в локальный репозиторий с помощью переключателя -DlocalRepositoryPath, как здесь:
mvn org.apache.maven.plugins:maven-install-plugin:2.5.2:install-file \
-Dfile=/some/path/on/my/local/filesystem/felix/servicebinder/target/org.apache.felix.servicebinder-0.9.0-SNAPSHOT.jar \
-DgroupId=org.apache.felix -DartifactId=org.apache.felix.servicebinder \
-Dversion=0.9.0-SNAPSHOT -Dpackaging=jar \
-DlocalRepositoryPath=${master_project}/local-maven-repo
В одном файле jar установлен такой mvn repo может быть привязан к репозиторию кода, а вся настройка не зависит от системы. ( рабочий пример в github )
Я согласен, что использование JAR для репозитория исходного кода не является хорошей практикой, но в реальной жизни быстрое и грязное решение иногда лучше, чем полная развязка репо, чтобы разместить одну банку, которую вы не можете опубликовать.
mvn deploy -DaltDeploymentRepository=releaseRepository::default::file://${project.basedir}/repo
– jcadcell
25 April 2017 в 02:32
Это короткий синтаксис для более новых версий:
mvn install:install-file -Dfile=<path-to-file>
Он работает, когда JAR был создан Apache Maven - наиболее распространенным случаем. Затем он будет содержать pom.xml в подпапке каталога META-INF, который будет считаться по умолчанию.
Источник: http://maven.apache.org/guides/ мини / гид-третьи стороны-баночка-local.html
Обратите внимание, что не обязательно использовать локальное репо. Если этот проект делится с другими, тогда у всех остальных будут проблемы и вопросы, если он не работает, и банка не будет доступна даже в вашей системе управления версиями!
Хотя общее репо - это лучший ответ, если вы не можете сделать это по какой-то причине, тогда встраивание банки лучше, чем локальное репо. Локальное содержимое репо может вызвать множество проблем, особенно с течением времени.
Также взгляните на ...
<scope>compile</scope>
Зависимости Maven . Это значение по умолчанию, но я обнаружил, что в некоторых случаях явным образом устанавливаю эту область также Maven для поиска локальных библиотек в локальном репозитории.
Я хочу поделиться кодом, в котором вы можете загрузить папку с банками. Это полезно, когда у провайдера нет общего репозитория, и вам нужно добавить много библиотек вручную. Я решил построить .bat вместо вызова непосредственно в maven, потому что это могут быть ошибки из памяти. Он был подготовлен для среды Windows, но легко адаптировать его к ОС Linux:
import java.io.File;
import java.io.IOException;
import java.io.PrintWriter;
import java.util.Date;
import java.util.jar.Attributes;
import java.util.jar.JarFile;
import java.util.jar.Manifest;
public class CreateMavenRepoApp {
private static final String OCB_PLUGIN_FOLDER = "C://your_folder_with_jars";
public static void main(String[] args) throws IOException {
File directory = new File();
//get all the files from a directory
PrintWriter writer = new PrintWriter("update_repo_maven.bat", "UTF-8");
writer.println("rem "+ new Date());
File[] fList = directory.listFiles();
for (File file : fList){
if (file.isFile()){
String absolutePath = file.getAbsolutePath() ;
Manifest m = new JarFile(absolutePath).getManifest();
Attributes attributes = m.getMainAttributes();
String symbolicName = attributes.getValue("Bundle-SymbolicName");
if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject")) {
String[] parts =symbolicName.split("\\.");
String artifactId = parts[parts.length-1];
String groupId = symbolicName.substring(0,symbolicName.length()-artifactId.length()-1);
String version = attributes.getValue("Bundle-Version");
String mavenLine= "call mvn org.apache.maven.plugins:maven-install-plugin:2.5.1:install-file -Dfile="+ absolutePath+" -DgroupId="+ groupId+" -DartifactId="+ artifactId+" -Dversion="+ version+" -Dpackaging=jar ";
writer.println(mavenLine);
}
}
}
writer.close();
}
}
После запуска этой основной из любой IDE запустите update_repo_maven.bat.
String symbolicName = attributes.getValue("Bundle-SymbolicName"); if(symbolicName!=null &&symbolicName.contains("com.yourCompany.yourProject"))
, по-видимому, указывает, что будут поддерживаться только custom i>. Это не то, что нам нужно: вместо этого куча сторонних банках. У вас есть предложения по установке any i> jar таким образом?
– javadba
27 November 2016 в 21:03
Еще один интересный случай - когда вы хотите иметь в своем проекте частные банки maven. Возможно, вы захотите сохранить возможности Maven для разрешения транзитивных зависимостей.
<properties><local.repository.folder>${pom.basedir}/libs/</local.repository.folder>
</properties>
<repositories>
<repository>
<id>local-maven-repository</id>
<url>file://${local.repository.folder}</url>
<releases>
<enabled>true</enabled>
</releases>
<snapshots>
<enabled>true</enabled>
</snapshots>
</repository>
</repositories>
Например. предположим, что вы хотите импортировать зависимость
<dependency>
<groupId>com.mycompany.myproject</groupId>
<artifactId>myproject</artifactId>
<version>1.2.3</version>
</dependency>
Просто запустите .m2 / repository, и вы увидите следующую папку
com / mycompany / myproject / 1.2.3
Скопируйте все в папку libs (опять же, включая папки в .m2 / repository), и все готово.
У меня была такая же ошибка для набора зависимостей в моем pom.xml, что версии зависимостей не были указаны в pom.xml и упоминались в родительском репозитории. По какой-то причине сведения о версии не синхронизировались с этим репо. Следовательно, я вручную ввел версии с использованием тега, и он работал как шарм. Немного времени, необходимого для поиска версий в родительском и укажите здесь. Но это можно сделать только для банок, которые показывают артефактную ошибку, и это работает. Надеюсь, это кому-то поможет.
Предпочтительным способом было бы создать собственный удаленный репозиторий.
Подробнее о том, как это сделать, см. здесь здесь . Посмотрите раздел «Загрузка в удаленный репозиторий».
Я хотел бы такое решение - использовать maven-install-plugin
в файле pom:
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<file>lib/yourJar.jar</file>
<groupId>com.somegroup.id</groupId>
<artifactId>artefact-id</artifactId>
<version>x.y.z</version>
<packaging>jar</packaging>
</configuration>
</execution>
</executions>
</plugin>
В этом случае вы можете выполнить mvn initialize
, а jar будет установлен в локальном репозитории maven. Теперь эта банка доступна во время любого шага maven на этом компьютере (не забудьте включить эту зависимость как любую другую зависимость maven в pom с тегом <dependency></dependency>
). Также возможно привязать установку jar к шагу initialize
, но любой другой шаг, который вам нравится.
mvn initialize
перед mvn package
: я не могу mvn initialize package
, иначе он пытается загрузить JAR из центрального репо. Почему это? Я думал, что это приведет к этим целям / фазам в порядке.
– DavidS
17 January 2017 в 21:31
compile
), сборка завершится неудачей.
– Gerold Broser
7 February 2018 в 20:41
Я думаю, что лучшим решением этой проблемы является использование maven-install-plugin для автоматической установки файлов во время установки. Вот как я настроил его для своего проекта.
Сначала добавьте путь (где вы храните локальные .jars) как свойство.
<properties>
<local.sdk>/path/to/jar</local.sdk>
</properties>
Затем в разделе plugins
добавьте плагин для установки банок при компиляции .
<plugin>
<groupId>org.apache.maven.plugins</groupId>
<artifactId>maven-install-plugin</artifactId>
<version>2.5.2</version>
<executions>
<execution>
<id>1</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<file>${local.sdk}/lib/impl/appengine-api.jar</file>
</configuration>
</execution>
<execution>
<id>appengine-api-stubs</id>
<phase>initialize</phase>
<goals>
<goal>install-file</goal>
</goals>
<configuration>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>1.0</version>
<packaging>jar</packaging>
<file>${local.sdk}/lib/impl/appengine-api-stubs.jar</file>
</configuration>
</execution>
</executions>
</plugin>
Наконец, в зависимостях вы можете добавить jars
<dependency>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api</artifactId>
<version>1.0</version>
</dependency>
<dependency>
<groupId>com.local.jar</groupId>
<artifactId>appengine-api-stubs</artifactId>
<version>1.0</version>
<scope>test</scope>
</dependency>
. Создав свой проект таким образом, проект будет продолжать строить, даже когда вы его берете на другой компьютер (учитывая, что он имеет все файлы jar в пути, указанном свойством local.sdk
).
Для groupId
используйте уникальное имя, чтобы убедиться, что конфликтов нет.
Теперь, когда ваши mvn install
или mvn test
локальные банки будут добавлены автоматически.
Создайте новую папку, скажем, local-maven-repo
в корне вашего проекта Maven.
Просто добавьте локальное репо внутри вашего <project>
вашего pom.xml
:
<repositories>
<repository>
<id>local-maven-repo</id>
<url>file:///${project.basedir}/local-maven-repo</url>
</repository>
</repositories>
Затем для каждой внешней банки, которую вы хотите установить, зайдите в корень вашего проекта и выполните:
mvn deploy:deploy-file -DgroupId=[GROUP] -DartifactId=[ARTIFACT] -Dversion=[VERS] -Durl=file:./local-maven-repo/ -DrepositoryId=local-maven-repo -DupdateReleaseInfo=true -Dfile=[FILE_PATH]
local-maven-repo
включена (как ребенок в этом примере) в исходную папку
– Anthony O.
9 March 2018 в 16:15
<dependency>
<groupId>group id name</groupId>
<artifactId>artifact name</artifactId>
<version>version number</version>
<scope>system</scope>
<systemPath>jar location</systemPath>
</dependency>