diff --git a/.gitignore b/.gitignore index b1354c9..51f4993 100644 --- a/.gitignore +++ b/.gitignore @@ -26,3 +26,4 @@ target/ # virtual machine crash logs, see http://www.java.com/en/download/help/error_hotspot.xml hs_err_pid* /.metadata/ +biz.aQute.protoc.test/errors \ No newline at end of file diff --git a/biz.aQute.protoc.test/.classpath b/biz.aQute.protoc.test/.classpath new file mode 100644 index 0000000..37d980e --- /dev/null +++ b/biz.aQute.protoc.test/.classpath @@ -0,0 +1,13 @@ + + + + + + + + + + + + + diff --git a/biz.aQute.protoc.test/.gitignore b/biz.aQute.protoc.test/.gitignore new file mode 100644 index 0000000..b34c537 --- /dev/null +++ b/biz.aQute.protoc.test/.gitignore @@ -0,0 +1 @@ +/src-gen/ diff --git a/biz.aQute.protoc.test/.project b/biz.aQute.protoc.test/.project new file mode 100644 index 0000000..caa2204 --- /dev/null +++ b/biz.aQute.protoc.test/.project @@ -0,0 +1,23 @@ + + + biz.aQute.protoc.test + + + + + + org.eclipse.jdt.core.javabuilder + + + + + bndtools.core.bndbuilder + + + + + + org.eclipse.jdt.core.javanature + bndtools.core.bndnature + + diff --git a/biz.aQute.protoc.test/.settings/org.eclipse.core.resources.prefs b/biz.aQute.protoc.test/.settings/org.eclipse.core.resources.prefs new file mode 100644 index 0000000..1554c6f --- /dev/null +++ b/biz.aQute.protoc.test/.settings/org.eclipse.core.resources.prefs @@ -0,0 +1,2 @@ +eclipse.preferences.version=1 +encoding/bnd.bnd=UTF-8 diff --git a/biz.aQute.protoc.test/.settings/org.eclipse.jdt.core.prefs b/biz.aQute.protoc.test/.settings/org.eclipse.jdt.core.prefs new file mode 100644 index 0000000..3a21537 --- /dev/null +++ b/biz.aQute.protoc.test/.settings/org.eclipse.jdt.core.prefs @@ -0,0 +1,11 @@ +eclipse.preferences.version=1 +org.eclipse.jdt.core.compiler.codegen.inlineJsrBytecode=enabled +org.eclipse.jdt.core.compiler.codegen.targetPlatform=1.8 +org.eclipse.jdt.core.compiler.codegen.unusedLocal=preserve +org.eclipse.jdt.core.compiler.compliance=1.8 +org.eclipse.jdt.core.compiler.debug.lineNumber=generate +org.eclipse.jdt.core.compiler.debug.localVariable=generate +org.eclipse.jdt.core.compiler.debug.sourceFile=generate +org.eclipse.jdt.core.compiler.problem.assertIdentifier=error +org.eclipse.jdt.core.compiler.problem.enumIdentifier=error +org.eclipse.jdt.core.compiler.source=1.8 diff --git a/biz.aQute.protoc.test/bnd.bnd b/biz.aQute.protoc.test/bnd.bnd new file mode 100644 index 0000000..664cb59 --- /dev/null +++ b/biz.aQute.protoc.test/bnd.bnd @@ -0,0 +1,8 @@ +src = ${^src},src-gen + +-generate \ + proto; \ + output = src-gen; \ + generate = "biz.aQute.protoc.Protoc -I=proto --java_out=src-gen proto/adddressbook.proto 2>errors" + +-buildpath: com.google.protobuf;version='4.0.0' \ No newline at end of file diff --git a/biz.aQute.protoc.test/proto/adddressbook.proto b/biz.aQute.protoc.test/proto/adddressbook.proto new file mode 100644 index 0000000..3153ad5 --- /dev/null +++ b/biz.aQute.protoc.test/proto/adddressbook.proto @@ -0,0 +1,29 @@ +syntax = "proto2"; + +package tutorial; + +option java_package = "com.example.tutorial"; +option java_outer_classname = "AddressBookProtos"; + +message Person { + required string name = 1; + required int32 id = 2; + optional string email = 3; + + enum PhoneType { + MOBILE = 0; + HOME = 1; + WORK = 2; + } + + message PhoneNumber { + required string number = 1; + optional PhoneType type = 2 [default = HOME]; + } + + repeated PhoneNumber phones = 4; +} + +message AddressBook { + repeated Person people = 1; +} \ No newline at end of file diff --git a/biz.aQute.protoc.test/proto/example.proto b/biz.aQute.protoc.test/proto/example.proto new file mode 100644 index 0000000..e69de29 diff --git a/biz.aQute.protoc.test/src-protoc/example.proto b/biz.aQute.protoc.test/src-protoc/example.proto new file mode 100644 index 0000000..e69de29 diff --git a/biz.aQute.protoc/.classpath b/biz.aQute.protoc/.classpath index 7bea397..5691ad8 100644 --- a/biz.aQute.protoc/.classpath +++ b/biz.aQute.protoc/.classpath @@ -4,5 +4,5 @@ - + diff --git a/biz.aQute.protoc/bnd.bnd b/biz.aQute.protoc/bnd.bnd index b9d8265..eade336 100644 --- a/biz.aQute.protoc/bnd.bnd +++ b/biz.aQute.protoc/bnd.bnd @@ -1,10 +1,11 @@ --includepackage biz.aQute.protoc +-includepackage biz.aQute.protoc.* -includeresource: \ exe/protoc-osx-x86_64=${repo;com.google.protobuf:protoc:exe:osx-x86_64}, \ exe/protoc-windows-x86_64=${repo;com.google.protobuf:protoc:exe:windows-x86_64}, \ - exe/protoc-linux-x86_64=${repo;com.google.protobuf:protoc:exe:linux-x86_64} + exe/protoc-linux-x86_64=${repo;com.google.protobuf:protoc:exe:linux-x86_64},\ + {src/main/resources} -buildpath: \ @@ -15,4 +16,4 @@ Main-Class biz.aQute.protoc.Protoc JPM-Command protoc --conditionalpackage: aQute*, org.slf* \ No newline at end of file +-conditionalpackage: aQute*, org.slf* diff --git a/biz.aQute.protoc/src/main/java/biz/aQute/protoc/Protoc.java b/biz.aQute.protoc/src/main/java/biz/aQute/protoc/Protoc.java index 87bfeda..a3004c9 100644 --- a/biz.aQute.protoc/src/main/java/biz/aQute/protoc/Protoc.java +++ b/biz.aQute.protoc/src/main/java/biz/aQute/protoc/Protoc.java @@ -6,9 +6,9 @@ import java.nio.file.Files; import java.nio.file.attribute.PosixFilePermission; import java.util.EnumSet; -import java.util.jar.Manifest; import aQute.lib.io.IO; +import aQute.lib.strings.Strings; import aQute.libg.command.Command; public class Protoc { @@ -30,12 +30,12 @@ else if (osName.startsWith("mac") || osName.startsWith("darwin") || osName.start URL resource = Protoc.class.getResource(name); if (resource == null) { - throw new IllegalArgumentException("Corrupt jar, not found resource " + name); + throw new IllegalArgumentException("Corrupt jar, not found " + name); } IO.copy(resource, f); f.setLastModified(modified); Files.setPosixFilePermissions(f.toPath(), - EnumSet.of(PosixFilePermission.OWNER_EXECUTE, PosixFilePermission.OWNER_READ)); + EnumSet.of(PosixFilePermission.OWNER_EXECUTE, PosixFilePermission.OWNER_READ, PosixFilePermission.OWNER_WRITE)); } Command cmd = new Command(); cmd.add(f.getAbsolutePath()); @@ -46,11 +46,11 @@ else if (osName.startsWith("mac") || osName.startsWith("darwin") || osName.start } private static long getModified() throws NumberFormatException, IOException { - return Long.parseLong( getManifest().getMainAttributes().getValue("Bnd-LastModified")); - } - - private static Manifest getManifest() throws IOException { - URL url = Protoc.class.getResource("/META-INF/MANIFEST.MF"); - return new Manifest(url.openStream()); + String timestamp = IO.collect(Protoc.class.getResource("timestamp.txt")); + if ( timestamp == null) { + return 0L; + } + + return Long.parseLong(Strings.trim(timestamp)); } } diff --git a/biz.aQute.protoc/src/main/resources/biz/aQute/protoc/timestamp.txt b/biz.aQute.protoc/src/main/resources/biz/aQute/protoc/timestamp.txt new file mode 100644 index 0000000..c382092 --- /dev/null +++ b/biz.aQute.protoc/src/main/resources/biz/aQute/protoc/timestamp.txt @@ -0,0 +1 @@ +${now;long} \ No newline at end of file diff --git a/cnf/build.bnd b/cnf/build.bnd index 7c2e67f..4e57778 100644 --- a/cnf/build.bnd +++ b/cnf/build.bnd @@ -21,7 +21,7 @@ test-cases: ${classes;NAMED;*Test} copyright.year = ${tstamp;yyyy} baseline.version: 1.0.0 -base.version: 1.1.0 +base.version: 1.2.0 # To release, remove the -SNAPSHOT diff --git a/cnf/central.mvn b/cnf/central.mvn index 209f4b3..a76d941 100644 --- a/cnf/central.mvn +++ b/cnf/central.mvn @@ -6,7 +6,7 @@ com.google.protobuf:protoc:exe:linux-x86_64:4.0.0-rc-2 com.google.protobuf:protoc:exe:osx-x86_64:4.0.0-rc-2 com.google.protobuf:protoc:exe:windows-x86_32:4.0.0-rc-2 com.google.protobuf:protoc:exe:windows-x86_64:4.0.0-rc-2 - +com.google.protobuf:protobuf-java:4.0.0-rc-2 # OSGi R7